现在的位置: 首页 > 综合 > 正文

Android SDK Tutorials系列 – Hello Views – Gallery

2013年08月14日 ⁄ 综合 ⁄ 共 3035字 ⁄ 字号 评论关闭

Gallery

Gallery是一个布局小部件,用来在一个水平滚动列表里显示内容,被选中的内容会被放置在中间位置。

本教程里,将创建一个相册,当某张图片被选中时,会弹出一个文本消息。

  1. 创建工程:HelloGallery.
  2. 要么自己找一些照片,要么使用示例图片。将图片保存到res/drawable/ 目录下.
  3. 打开res/layout/main.xml文件并修改如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Gallery xmlns:android="http://schemas.android.com/apk/res/android" 
        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布局文件,然后通过findViewById(int)获得对Gallery的引用。实例化一个继承自BaseAdapter的类ImageAdapter(将在下面定义),然后调用setAdapter()方法将ImageAdapter装载到Gallery上。再实例化一个匿名的AdapterView.OnItemClickListener项目点击事件监听器。回调函数onItemClick(AdapterView,
    View, int, long)
     收到的参数有发生点击事件的AdapterView,收到点击的ViewView被点击的位置,和被点击项目所在的行号(如果有的话)。这个例子里,所需要的信息就是被点击的位置,利用makeText(Context,
    CharSequence, int)
     和show() 方法来弹出一个文本消息显示被点击项目的位置。(在现实世界的场景里,ID可以用来为某些任务获得全尺寸图片。)

  5. res/values/ 目录下创建一个XML文件attrs.xml,内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="HelloGallery">
            <attr name="android:galleryItemBackground" />
        </declare-styleable>
    </resources>

    这是一个定制显示风格的资源,可以应用到界面上。这个例子里,它将定制Gallery里面的一个个项目的显示风格。

  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;
        }
    }

    首先,有一些成员变量,包括一个ID的数组,用来引用存放在res/drawable/下的图像资源。下一步是定义构造函数,参数是Context,定制风格资源(上一步定义的)的引用被保存到局部变量。构造函数的最后,调用recycle()方法让TypeArray能被系统复用。getCount()getItem(int)getItemId(int)必须实现,为Adapter适配器提供简单的查询功能。

    getView()方法并不是为ImageView提供一个图片,而是利用Context创建一个ImageView。为创建的ImageView做以下几点:根据位置参数从图片资源数组取一个图片设置到ImageView里;设置图片的宽高;设置显示比例以适应ImageView的尺寸;最后,设置背景为在构造函数里取得的风格化资源。

    参考ImageView.ScaleType 看看其他的比例选项。

  7. 运行应用。

应该能看到如下画面:

Hello Gallery






抱歉!评论已关闭.