利用Gallery和ImageView实现图片浏览器
首先,先看一下实现的截图:
如图所示,
其中布局的第一个控件是Gallery,显示的图片滑动浏览,这里用到一个继承自BaseAdapter的类对象,用于填充和显示Gallery中的内容;
布局的第二个控件是ImageView,当用户滑动Gallery时,显示其中的图片,这其中实现了两个重载方法
1.当用户点击Gallery的图片资源时,以Toast的形式告诉用户点击的是哪一幅图片,实现的代码如下:
public class EX04_10 extends Activity { /*建构一Integer array并取得预加载Drawable的图片id*/ private Integer[] myImageIds = { R.drawable.photo1, R.drawable.photo2, R.drawable.photo3, R.drawable.photo4, R.drawable.photo5, R.drawable.photo6, }; private ImageView imageView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /*透过findViewById取得*/ Gallery g = (Gallery) findViewById(R.id.mygallery); imageView=(ImageView)findViewById(R.id.imageview); /*新增一ImageAdapter并设定给Gallery对象*/ g.setAdapter(new ImageAdapter(this)); /*设定一个itemclickListener并Toast被点选图片的位置*/ g.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Toast.makeText(EX04_10.this, getString(R.string.my_gallery_text_pre) + position + getString(R.string.my_gallery_text_post), Toast.LENGTH_SHORT).show(); } }); g.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub imageView.setImageResource(myImageIds[arg2]); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }); } /*改写BaseAdapter自定义一ImageAdapter class*/ public class ImageAdapter extends BaseAdapter { int mGalleryItemBackground; private Context mContext; /*ImageAdapter的建构子*/ public ImageAdapter(Context c) { mContext = c; /* 使用在res/values/attrs.xml中的定义 * 的Gallery属性.*/ TypedArray a = obtainStyledAttributes(R.styleable.Gallery); /*取得Gallery属性的Index id*/ mGalleryItemBackground = a.getResourceId( R.styleable.Gallery_android_galleryItemBackground, 0); /*让对象的styleable属性能够反复使用*/ a.recycle(); } /*一定要重写的方法getCount,传回图片数目*/ public int getCount() { return myImageIds.length; } /*一定要重写的方法getItem,传回position*/ public Object getItem(int position) { return position; } /*一定要重写的方法getItemId,传回position*/ public long getItemId(int position) { return position; } /*一定要重写的方法getView,传回一View对象*/ public View getView(int position, View convertView, ViewGroup parent) { /*产生ImageView对象*/ ImageView i = new ImageView(mContext); /*设定图片给imageView对象*/ i.setImageResource(myImageIds[position]); /*重新设定图片的宽高*/ i.setScaleType(ImageView.ScaleType.FIT_XY); /*重新设定Layout的宽高*/ i.setLayoutParams(new Gallery.LayoutParams(136, 110)); /*设定Gallery背景图*/ i.setBackgroundResource(mGalleryItemBackground); /*传回imageView物件*/ return i; } } }