Hello Views之Gallery(yaozq翻页,仅供参考)

Gallery是用来将当前选择的图片在View中间显示,并水平滚动的一种布局组件。(Gallery is a layout widget used to display items in a horizontally scrolling list and positions the current selection at the center of the view。)

在这个指导中,你将创建一个图片的gallery,并在每次gallery的项被选中的时候弹出一个toast。下面是具体步骤:

1,新建一个叫HelloGalleryAndroid项目。

2,找一些图片,并把这些图片保存到项目的res/drawable目录下。

3,打开res/layout/main.xml文件,并将下面的内容插入进去:



android:id="@+id/gallery"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

4,打开HelloGallery.java文件,在onCreate()方法中插入下面的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
  	  super.onCreate(savedInstanceState);
  	  setContentView(R.layout.main);

  	  Gallery gallery = (Gallery) findViewById(R.id.gallery);
  	  gallery.setAdapter(new ImageAdapter(this));

  	  gallery.setOnItemClickListener(new OnItemClickListener() {
 	       public void onItemClick(AdapterView parent, View v, int position, long id) {
            Toast.makeText(HelloGallery.this, "" + position, Toast.LENGTH_SHORT).show();
        }
  	  });
}

这将把main.xml布局文件设为content view,并通过findViewById(int)得到布局文件中的Gallery对象。一个叫ImageAdapterBaseAdapter子类被实例化,并通过setAdapter()方法被用到Gallery对象上。(ImageAdapter将在后面定义。)然后一个匿名的AdapterView.OnItemClickListener被初始化。onItemClickAdapterView,View,int,long)回调方法接收AdapterView,这个AdapterView就是点击事件发生的地方,也是特定View接收点击、View被点击的位置、被点击项的行ID的地方。在这个例子中,所需要的数据就是得到点击发生的位置,然后使用一个Toast(通过调用makeText(Context, CharSequence, int)show()方法来使用)信息来说明点击的是哪个项。

5,在res/values目录下创建一个名为attrs.xml的新的XML文件,插入到如下的地方:






这是一个可以被运用到布局的定制的styleable资源。在这个例子中,它将被用到Gallery中的一个单独的items元素为styleable定义了一个明确的属性,并且在这个例子中,它引用了一个已经存在的平台属性:galleryItemBackground,这个平台属性为galleryitems定义了一个边界样式(a border styling)。在接下来的步骤中,你将看到这个属性是怎样被引用的和怎样被运用于gallery的每一个item中。

6,返回到HelloGallery.java文件。在onCreate(Bundle)方法之后,定义定制的ImageAdapter类:

public class ImageAdapter extends BaseAdapter {
    int mGalleryItemBackground;
    private Context mContext;

    private Integer[] mImageIds = {
            R.drawable.sample_1,
            R.drawable.sample_2,
            R.drawable.sample_3,
            R.drawable.sample_4,
            R.drawable.sample_5,
            R.drawable.sample_6,
            R.drawable.sample_7
    };

    public ImageAdapter(Context c) {
        mContext = c;
        TypedArray attr = mContext.obtainStyledAttributes(R.styleable.HelloGallery);
        mGalleryItemBackground = attr.getResourceId(
                R.styleable.HelloGallery_android_galleryItemBackground, 0);
        attr.recycle();
    }

    public int getCount() {
        return mImageIds.length;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView = new ImageView(mContext);

        imageView.setImageResource(mImageIds[position]);
        imageView.setLayoutParams(new Gallery.LayoutParams(150, 100));
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageView.setBackgroundResource(mGalleryItemBackground);

        return imageView;
    }

首先,有几个变量,包括在引用图片资源目录(res/drawable/)下图片的ID数组。

接下来就是,类的构造器,ImageAdapter对象的Context被定义,并需要上一步定义的styleable资源,并把这个资源保存到一个局部变量中。在构造器的末尾,recycle()方法被调用到TypedArray,这样的好处是TypedArray可以被系统循环利用。

getCount()getItem(int)getItemId(int)这些方法是为了简单查询Adapter必须要实现的方法。这个方法的作用就是把一张图片将被嵌入到Gallery的一个{@link android.widget.ImageView中。在这个方法中,成员变量Context是用来创建一个ImageView。在申请了drawable资源数组中的图片、设置Gallery.LayoutParams的图片的高宽、设置填充ImageView的尺寸、设置背景来使用这个构造器需要的styleable属性之后,ImageView便就绪了。

7,运行程序。


你可能感兴趣的:(Hello Views之Gallery(yaozq翻页,仅供参考))