读书人

Android进门第十二篇之Gallery

发布时间: 2013-11-09 17:06:41 作者: rapoo

Android入门第十二篇之Gallery

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

???????本文的效果图:

Android进门第十二篇之Gallery

?

main.xml源码:

?

程序源码:

view plaincopy to clipboardprint?

  1. package?com.testImageView;????
  2. import?java.lang.reflect.Field;??import?java.util.ArrayList;??
  3. ??import?android.app.Activity;??
  4. import?android.content.Context;??import?android.graphics.Bitmap;??
  5. import?android.graphics.BitmapFactory;??import?android.os.Bundle;??
  6. import?android.view.View;??import?android.view.ViewGroup;??
  7. import?android.widget.AdapterView;??import?android.widget.BaseAdapter;??
  8. import?android.widget.Gallery;??import?android.widget.ImageView;??
  9. import?android.widget.AdapterView.OnItemClickListener;????
  10. public?class?testImageView?extends?Activity?{??????private?Gallery?mGallery;??
  11. ????@Override??????public?void?onCreate(Bundle?savedInstanceState)?{??
  12. ????????super.onCreate(savedInstanceState);??????????setContentView(R.layout.main);??
  13. ??????????????????mGallery?=?(Gallery)findViewById(R.id.gallery);??
  14. ????????try?{??????????????mGallery.setAdapter(new?ImageAdapter(this));??
  15. ????????}?catch?(IllegalArgumentException?e)?{??????????????//?TODO?Auto-generated?catch?block??
  16. ????????????e.printStackTrace();??????????}?catch?(IllegalAccessException?e)?{??
  17. ????????????//?TODO?Auto-generated?catch?block??????????????e.printStackTrace();??
  18. ????????}??????????mGallery.setOnItemClickListener(new?OnItemClickListener()?{??
  19. ????????????public?void?onItemClick(AdapterView?parent,?View?v,?int?position,?long?id)?{??????????????????testImageView.this.setTitle(String.valueOf(position));??
  20. ????????????}??????????});??
  21. ????}????????
  22. ????/*??????*?class?ImageAdapter?is?used?to?control?gallery?source?and?operation.?
  23. ?????*/??????private?class?ImageAdapter?extends?BaseAdapter{??
  24. ????????private?Context?mContext;??????????private?ArrayList<Integer>?imgList=new?ArrayList<Integer>();??
  25. ????????private?ArrayList<Object>?imgSizes=new?ArrayList<Object>();??????????public?ImageAdapter(Context?c)?throws?IllegalArgumentException,?IllegalAccessException{??
  26. ????????????mContext?=?c;????????????????
  27. ????????????//用反射机制来获取资源中的图片ID和尺寸??????????????Field[]?fields?=?R.drawable.class.getDeclaredFields();??
  28. ????????????for?(Field?field?:?fields)??????????????{??
  29. ????????????????if?(!"icon".equals(field.getName()))//除了icon之外的图片??????????????????{?????
  30. ????????????????????int?index=field.getInt(R.drawable.class);??????????????????????//保存图片ID??
  31. ????????????????????imgList.add(index);??????????????????????//保存图片大小??
  32. ????????????????????int?size[]=new?int[2];??????????????????????Bitmap?bmImg=BitmapFactory.decodeResource(getResources(),index);??
  33. ????????????????????size[0]=bmImg.getWidth();size[1]=bmImg.getHeight();??????????????????????imgSizes.add(size);??
  34. ????????????????}??????????????}??
  35. ????????}??????????@Override??
  36. ????????public?int?getCount()?{??????????????//?TODO?Auto-generated?method?stub??
  37. ??????????????return?imgList.size();??
  38. ????????}????
  39. ????????@Override??????????public?Object?getItem(int?position)?{??
  40. ????????????//?TODO?Auto-generated?method?stub????
  41. ????????????return?position;??????????}??
  42. ??????????@Override??
  43. ????????public?long?getItemId(int?position)?{??????????????//?TODO?Auto-generated?method?stub??
  44. ??????????????return?position;??
  45. ????????}????
  46. ????????@Override??????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{??
  47. ????????????//?TODO?Auto-generated?method?stub????
  48. ????????????ImageView?i?=?new?ImageView?(mContext);??????????????//从imgList取得图片ID??
  49. ????????????i.setImageResource(imgList.get(position).intValue());??????????????i.setScaleType(ImageView.ScaleType.FIT_XY);??
  50. ????????????//从imgSizes取得图片大小??????????????int?size[]=?new?int[2];??
  51. ????????????size=(int[])?imgSizes.get(position);??????????????i.setLayoutParams(new?Gallery.LayoutParams(size[0],?size[1]));??
  52. ????????????return?i;??????????}??
  53. ??????????????};??
  54. }?

读书人网 >Android

热点推荐