ITPub博客

首页 > Linux操作系统 > Linux操作系统 > android 拖动效果 Gallery 实例

android 拖动效果 Gallery 实例

原创 Linux操作系统 作者:DBA_M 时间:2013-10-10 09:15:06 0 删除 编辑
大多数手机上都会有类似的动态效果,因为这样的动画会让人耳目一新。苹果曾经因此吸引了不少手机粉丝。那么在android上同样也可以实现此效果。
Gallery的功能就是用来显示这样的效果。简单说明一下Gallery是什么样的:
假设你放入了10个图片,那么你用Gallery的时候,用此容器来存放你的图片,在手机界面上会把图片显示出来(android的系统中带有自己的Gallery的风格)。那么你在点击后一张图片的时候前一张图片就会往前移动,而你点击的图片就会突出显示。你也可以触摸拖动图片,任意选择你想要的那张图片突出显示。
  不过,通常的Gallery在你指定了10张或者更多的图片时,到了最后一张就不在循环显示了。也就是说,它只能限定显示图片。
  通过一个实例来完成Gallery的用法。
  首先:我们要知道Gallery是显示图片用的,那么就需要指定他的显示布局。
我们需要一个ImageView来完成此布局,而此布局需要继承BaseAdapter,来实现其中的方法来为Gallery实现效果。
我们所有要用到的图片要放在一个int型数组中,然后通过ImageView的setImageResource方法来设置需要显示的图片,然后在把此图片通过ImageView对象显示在手机屏幕上。
ImageAdapter类:

Java代码 复制代码 收藏代码
  1. public class ImageAdapter extends BaseAdapter {   
  2.         // 用来设置ImageView的风格   
  3.     int mGalleryItemBackground;   
  4.     private Context context;     
  5.     //图片的资源ID   
  6.     private Integer[] mImageIds = {   
  7.         R.drawable.img1,       
  8.         R.drawable.img2,       
  9.         R.drawable.img3,       
  10.         R.drawable.img4,       
  11.         R.drawable.img5,       
  12.         R.drawable.img6,       
  13.         R.drawable.img7,       
  14.         R.drawable.img8    
  15.     };   
  16.         //构造函数   
  17.     public ImageAdapter(Context context) {   
  18.         // TODO Auto-generated constructor stub   
  19.         this.context = context;   
  20.     }   
  21.     //返回所有图片的个数   
  22.     @Override  
  23.     public int getCount() {   
  24.         // TODO Auto-generated method stub   
  25.         return mImageIds.length;   
  26.     }   
  27.         //返回图片在资源的位置   
  28.     @Override  
  29.     public Object getItem(int position) {   
  30.         // TODO Auto-generated method stub   
  31.         return position;   
  32.     }   
  33.         //返回图片在资源的位置   
  34.     @Override  
  35.     public long getItemId(int position) {   
  36.         // TODO Auto-generated method stub   
  37.         return position;   
  38.     }   
  39.         //此方法是最主要的,他设置好的ImageView对象返回给Gallery   
  40.     @Override  
  41.     public View getView(int position, View convertView, ViewGroup parent) {   
  42.         // TODO Auto-generated method stub   
  43.         ImageView imageView = new ImageView(context);   
  44.                 //通过索引获得图片并设置给ImageView   
  45.         imageView.setImageResource(mImageIds[position]);   
  46.                 //设置ImageView的伸缩规格,用了自带的属性值   
  47.         imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);   
  48.                 //设置布局参数   
  49.         imageView.setLayoutParams(new Gallery.LayoutParams(120120));   
  50.                 //设置风格,此风格的配置是在xml中   
  51.         imageView.setBackgroundResource(mGalleryItemBackground);   
  52.         return imageView;   
  53.     }   
  54.   
  55.     public int getmGalleryItemBackground() {   
  56.         return mGalleryItemBackground;   
  57.     }   
  58.   
  59.     public void setmGalleryItemBackground(int mGalleryItemBackground) {   
  60.         this.mGalleryItemBackground = mGalleryItemBackground;   
  61.     }   
  62.   
  63. }  

上面的代码实现了要用来放置在Gallery中的ImageView对象。其中上面有几个部分要注意:
1.mGalleryItemBackground 此变量是用来设置ImageView的显示风格的,那么它的配置我写在了一个xml中(/valus/attrs.xml):
Xml代码
  1. xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <declare-styleable name="Gallery">  
  4.         <attr name="android:galleryItemBackground"/>  
  5.     declare-styleable>  
  6. resources>  

同时,我在网上看到有人把读取这个的代码
引用
TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);

同时也放在了构造函数中,但是我尝试了去这么做失败了,所以我把此代码提取了出来放在了Activity中设置,那么需要把mGalleryItemBackground 变量在ImageAdapter中放入set()方法。
2.getCount和getView。其中getCount是返回图片总数,但这个总数不能大于图片的实际数(可以小于),否则会抛出越界异常。
而getView是核心,Gallery组件要显示某一个图片时,就会调用getView方法,并将当前的图片索引(position参数)传给该方法,然后返回一个ImageView对象。它不是一下把所有的图片都显示出来,而是即时的显示。
那么在看activity中,在这里就简单了。
Activity01类:
Java代码
  1. public class Activity01 extends Activity {   
  2.     /** Called when the activity is first created. */  
  3.     private Gallery myGallery;   
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {   
  6.         super.onCreate(savedInstanceState);   
  7.         setContentView(R.layout.main);   
  8.         myGallery = (Gallery)findViewById(R.id.myGallery);   
  9.         //这段代码是杨丰盛老师的《android开发揭秘》中这样写的   
  10.         //myGallery.setBackgroundResource(R.drawable.bg0);   
  11.         ImageAdapter adapter = new ImageAdapter(this);   
  12.         //设置背景风格。Gallery背景风格定义在attrs.xml中   
  13.         TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);   
  14.         adapter.setmGalleryItemBackground(typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0));   
  15.         myGallery.setAdapter(adapter);   
  16.     }   
  17. }  

main.xml(这里只放入了一个Gallery):
Xml代码
  1. xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <Gallery  
  8.     android:id="@+id/myGallery"  
  9.     android:layout_width="fill_parent"  
  10.     android:layout_height="wrap_content"/>  
  11. LinearLayout>  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29237718/viewspace-774036/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-10-09

  • 博文量
    4
  • 访问量
    19696