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

public class ImageAdapter extends BaseAdapter {        // 用来设置ImageView的风格int mGalleryItemBackground;private Context context;  //图片的资源IDprivate Integer[] mImageIds = {R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,R.drawable.img5,R.drawable.img6,R.drawable.img7,R.drawable.img8};        //构造函数public ImageAdapter(Context context) {// TODO Auto-generated constructor stubthis.context = context;}//返回所有图片的个数@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mImageIds.length;}        //返回图片在资源的位置@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn position;}        //返回图片在资源的位置@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}        //此方法是最主要的,他设置好的ImageView对象返回给Gallery@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubImageView imageView = new ImageView(context);                //通过索引获得图片并设置给ImageViewimageView.setImageResource(mImageIds[position]);                //设置ImageView的伸缩规格,用了自带的属性值imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);                //设置布局参数imageView.setLayoutParams(new Gallery.LayoutParams(120, 120));                //设置风格,此风格的配置是在xml中imageView.setBackgroundResource(mGalleryItemBackground);return imageView;}public int getmGalleryItemBackground() {return mGalleryItemBackground;}public void setmGalleryItemBackground(int mGalleryItemBackground) {this.mGalleryItemBackground = mGalleryItemBackground;}}

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

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

main.xml(这里只放入了一个Gallery):
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><Galleryandroid:id="@+id/myGallery"android:layout_width="fill_parent"android:layout_height="wrap_content"/></LinearLayout>

ok,到这里就结束了。我把我做的例子上传供大家下载学习。
ps:用到的图片都是杨老师的例子中的,我手中也有一本他的书,但是书中解说的很少,所以自己总结了一下。

更多相关文章

  1. Android中ListView使用- 网络图片的异步加载
  2. android不将apk包编译到系统里的方法
  3. Android带进度条的下载图片示例(AsyncTask异步任务)
  4. Android、iOS添加子视图方法比较
  5. 对Android 平台下SElinux的理解及遇到过的相关问题解决方法总结
  6. Android同步方法中异步操作获取返回值。
  7. [置顶] android从图库(gallery)选择一张图片

随机推荐

  1. [android]为程序创建快捷方式
  2. 卡联系人IccProvider
  3. android apk 破解
  4. android 弹出框(输入框和选择框)
  5. Android 结合WindowManager和WindowManag
  6. Android 调用系统相机拍照的返回结果
  7. Android中Matrix的pre post set方法理解
  8. Android关闭开机弹出SIM卡变动提示对话框
  9. How to Implement Push Notifications fo
  10. Android消息处理探秘