Android进门第十二篇之Gallery
Android入门第十二篇之GalleryAndroid的Gallery控件是个很不错的看图控件,大大减轻了开发者对于看图功能的
Android入门第十二篇之Gallery
Android的Gallery控件是个很不错的看图控件,大大减轻了开发者对于看图功能的开发,而且效果也比较美观。本文介绍Gallery的用法,用反射机制来动态读取资源中的图片。
???????本文的效果图:

?
main.xml源码:
?
程序源码:
view plaincopy to clipboardprint?
- package?com.testImageView;????
- import?java.lang.reflect.Field;??import?java.util.ArrayList;??
- ??import?android.app.Activity;??
- import?android.content.Context;??import?android.graphics.Bitmap;??
- import?android.graphics.BitmapFactory;??import?android.os.Bundle;??
- import?android.view.View;??import?android.view.ViewGroup;??
- import?android.widget.AdapterView;??import?android.widget.BaseAdapter;??
- import?android.widget.Gallery;??import?android.widget.ImageView;??
- import?android.widget.AdapterView.OnItemClickListener;????
- public?class?testImageView?extends?Activity?{??????private?Gallery?mGallery;??
- ????@Override??????public?void?onCreate(Bundle?savedInstanceState)?{??
- ????????super.onCreate(savedInstanceState);??????????setContentView(R.layout.main);??
- ??????????????????mGallery?=?(Gallery)findViewById(R.id.gallery);??
- ????????try?{??????????????mGallery.setAdapter(new?ImageAdapter(this));??
- ????????}?catch?(IllegalArgumentException?e)?{??????????????//?TODO?Auto-generated?catch?block??
- ????????????e.printStackTrace();??????????}?catch?(IllegalAccessException?e)?{??
- ????????????//?TODO?Auto-generated?catch?block??????????????e.printStackTrace();??
- ????????}??????????mGallery.setOnItemClickListener(new?OnItemClickListener()?{??
- ????????????public?void?onItemClick(AdapterView?parent,?View?v,?int?position,?long?id)?{??????????????????testImageView.this.setTitle(String.valueOf(position));??
- ????????????}??????????});??
- ????}????????
- ????/*??????*?class?ImageAdapter?is?used?to?control?gallery?source?and?operation.?
- ?????*/??????private?class?ImageAdapter?extends?BaseAdapter{??
- ????????private?Context?mContext;??????????private?ArrayList<Integer>?imgList=new?ArrayList<Integer>();??
- ????????private?ArrayList<Object>?imgSizes=new?ArrayList<Object>();??????????public?ImageAdapter(Context?c)?throws?IllegalArgumentException,?IllegalAccessException{??
- ????????????mContext?=?c;????????????????
- ????????????//用反射机制来获取资源中的图片ID和尺寸??????????????Field[]?fields?=?R.drawable.class.getDeclaredFields();??
- ????????????for?(Field?field?:?fields)??????????????{??
- ????????????????if?(!"icon".equals(field.getName()))//除了icon之外的图片??????????????????{?????
- ????????????????????int?index=field.getInt(R.drawable.class);??????????????????????//保存图片ID??
- ????????????????????imgList.add(index);??????????????????????//保存图片大小??
- ????????????????????int?size[]=new?int[2];??????????????????????Bitmap?bmImg=BitmapFactory.decodeResource(getResources(),index);??
- ????????????????????size[0]=bmImg.getWidth();size[1]=bmImg.getHeight();??????????????????????imgSizes.add(size);??
- ????????????????}??????????????}??
- ????????}??????????@Override??
- ????????public?int?getCount()?{??????????????//?TODO?Auto-generated?method?stub??
- ??????????????return?imgList.size();??
- ????????}????
- ????????@Override??????????public?Object?getItem(int?position)?{??
- ????????????//?TODO?Auto-generated?method?stub????
- ????????????return?position;??????????}??
- ??????????@Override??
- ????????public?long?getItemId(int?position)?{??????????????//?TODO?Auto-generated?method?stub??
- ??????????????return?position;??
- ????????}????
- ????????@Override??????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{??
- ????????????//?TODO?Auto-generated?method?stub????
- ????????????ImageView?i?=?new?ImageView?(mContext);??????????????//从imgList取得图片ID??
- ????????????i.setImageResource(imgList.get(position).intValue());??????????????i.setScaleType(ImageView.ScaleType.FIT_XY);??
- ????????????//从imgSizes取得图片大小??????????????int?size[]=?new?int[2];??
- ????????????size=(int[])?imgSizes.get(position);??????????????i.setLayoutParams(new?Gallery.LayoutParams(size[0],?size[1]));??
- ????????????return?i;??????????}??
- ??????????????};??
- }?