在iphone手機上用手指拖動圖片移動,這功能很Cool,咱Android也不能含糊,用Gallery類就可以實現這個功能。
今天我就做了個小小的電子相冊:
假設你已經新建好了項目。
首先我們事先准備好的圖片存放在drawable文件夾下,然後新建一個接口:
- public interface ImageResource {
- //用一個Integer數組保存圖像資源
- Integer[] dImageID = {
- R.drawable.sample_0,
- 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,
- };
- }
這個接口裡有一個int型的數組保存了咱drawable下的圖片,這樣方便以後修改。
要用Gallery實現這個功能,先要有一個容器來存放Gallery要顯示的圖片,我使用的是一個繼承自BaseAdapter的ImageAdapter。這個電子相冊分兩部分,上部分是用戶可以拖動圖像列表,下部分是用戶選中上面圖像後更大的顯示出來。看圖:
負責上部分顯示的ImageView是imageAll,負責下部分顯示的是imageOne,代碼如下:
- import android.app.Activity;
- import android.content.Context;
- import android.content.res.TypedArray;
- import android.os.Bundle;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.Gallery;
-
- public class HelloGallery extends Activity {
- //這個ImageView是用來顯示單個圖像
- private ImageView imageOne;
- //這個ImageView是用來顯示所有圖像
- private ImageView imageAll;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- imageOne = (ImageView)findViewById(R.id.imageView);
-
- //新建一個Gallery類,這是是實現拖動效果的關鍵
- //Gallery is 一個用來水平卷動顯示對象的視圖
- Gallery gallery = (Gallery)findViewById(R.id.gallery);
-
- //ImageAdapter就是gallery要顯示的對象
- gallery.setAdapter(new ImageAdapter(this));
-
- }
- //實現ImageResource接口獲得我自己創建的圖像資源
- class ImageAdapter extends BaseAdapter implements ImageResource{
- //每一個gallery中圖像的背景資源
- private int galleryItemBackground;
- private Context context;
-
- public ImageAdapter(Context context) {
- this.context = context;
- //這裡實現的功能就是上半部分每個圖像的那個背景框
- //對應的xml文件就是attr.xml
- TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
- galleryItemBackground = a.getResourceId(
- R.styleable.Gallery1_android_galleryItemBackground, 0);
- a.recycle();
- }
-
- public int getCount() {
- return dImageID.length;
- }
-
- public Object getItem(int position) {
- return position;
- }
-
- //這個方法獲得是呈現在用戶面前的圖像下標
- public long getItemId(int position) {
- //將此索引的圖像設為imageOne顯示 imageOne.setImageResource(ImageAdapter.dImageID[position]);
- imageOne.setScaleType(ImageView.ScaleType.FIT_CENTER);
- return position;
- }
-
- //這個方法返回的ImageView就是實現拖動效果的圖像
- public View getView(int position, View convertView, ViewGroup parent) {
- imageAll= new ImageView(context);
- //設置圖像資源
- imageAll.setImageResource(dImageID[position]);
- //設置imageAll視圖為120×120
- imageAll.setLayoutParams(new Gallery.LayoutParams(120,120));
- //設置圖像相對於視圖的比例,FIT_XY表示充滿X和Y軸
- imageAll.setScaleType(ImageView.ScaleType.FIT_XY);
- //設置imageAll中每一個Item的背景資源
- imageAll.setBackgroundResource(galleryItemBackground);
- return imageAll;
- }
- }
- }