首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

Android入门户十三篇之Gallery + ImageSwitcher

2012-09-17 
Android入门第十三篇之Gallery + ImageSwitcher上次讲了如何使用Gallery控件,这次就讲Gallery 与ImageSwit

Android入门第十三篇之Gallery + ImageSwitcher

上次讲了如何使用Gallery控件,这次就讲Gallery 与ImageSwitcher的结合使用,本文实现一个简单的浏览图片的功能。先贴出程序运行截图:

Android入门户十三篇之Gallery + ImageSwitcher

除了Gallery可以拖拉切换图片,我在ImageSwitcher控件加入了setOnTouchListener事件实现,使得ImageSwitcher也可以在拖拉中切换图片。本例子依然使用JAVA的反射机制来自动读取资源中的图片。

?

main.xml的源码如下:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageSwitcher android:id="@+id/switcher" android:layout_width="match_parent" android:layout_height="match_parent"/> <Gallery android:id="@+id/gallery" android:background="#55000000" android:layout_width="match_parent" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:gravity="center_vertical" android:spacing="16dp" android:layout_height="100dp"/></RelativeLayout>

?

程序的源码如下:

view plaincopy to clipboardprint?

  1. package?com.testImageView;??import?java.lang.reflect.Field;??
  2. import?java.util.ArrayList;??import?android.app.Activity;??
  3. import?android.content.Context;??import?android.os.Bundle;??
  4. import?android.view.MotionEvent;??import?android.view.View;??
  5. import?android.view.View.OnTouchListener;??import?android.view.ViewGroup;??
  6. import?android.view.animation.AnimationUtils;??import?android.widget.AdapterView;??
  7. import?android.widget.BaseAdapter;??import?android.widget.Gallery;??
  8. import?android.widget.ImageSwitcher;??import?android.widget.ImageView;??
  9. import?android.widget.AdapterView.OnItemSelectedListener;??import?android.widget.Gallery.LayoutParams;??
  10. import?android.widget.ViewSwitcher.ViewFactory;??public?class?testImageView?extends?Activity?implements?ViewFactory?{??
  11. ????private?ImageSwitcher?is;??????private?Gallery?gallery;??
  12. ????private?int?downX,upX;??????private?ArrayList<Integer>?imgList=new?ArrayList<Integer>();//图像ID??
  13. ??????????@Override??
  14. ????protected?void?onCreate(Bundle?savedInstanceState)?{??????????//?TODO?Auto-generated?method?stub??
  15. ????????super.onCreate(savedInstanceState);??????????setContentView(R.layout.main);??
  16. ????????//用反射机制来获取资源中的图片ID??????????Field[]?fields?=?R.drawable.class.getDeclaredFields();??
  17. ????????for?(Field?field?:?fields)??????????{??
  18. ????????????if?(!"icon".equals(field.getName()))//除了icon之外的图片??????????????{?????
  19. ????????????????int?index?=?0;??????????????????try?{??
  20. ????????????????????index?=?field.getInt(R.drawable.class);??????????????????}?catch?(IllegalArgumentException?e)?{??
  21. ????????????????????//?TODO?Auto-generated?catch?block??????????????????????e.printStackTrace();??
  22. ????????????????}?catch?(IllegalAccessException?e)?{??????????????????????//?TODO?Auto-generated?catch?block??
  23. ????????????????????e.printStackTrace();??????????????????}??
  24. ????????????????//保存图片ID??????????????????imgList.add(index);??
  25. ????????????}??????????}??
  26. ??????????????????//设置ImageSwitcher控件??
  27. ????????is?=?(ImageSwitcher)?findViewById(R.id.switcher);??????????is.setFactory(this);??
  28. ????????is.setInAnimation(AnimationUtils.loadAnimation(this,??????????????????android.R.anim.fade_in));??
  29. ????????is.setOutAnimation(AnimationUtils.loadAnimation(this,??????????????????android.R.anim.fade_out));??
  30. ????????is.setOnTouchListener(new?OnTouchListener(){??????????????/*?
  31. ?????????????*?在ImageSwitcher控件上滑动可以切换图片??????????????*/??
  32. ????????????@Override??????????????public?boolean?onTouch(View?v,?MotionEvent?event)?{??
  33. ????????????????if(event.getAction()==MotionEvent.ACTION_DOWN)??????????????????{??
  34. ????????????????????downX=(int)?event.getX();//取得按下时的坐标??????????????????????return?true;??
  35. ????????????????}??????????????????else?if(event.getAction()==MotionEvent.ACTION_UP)??
  36. ????????????????{??????????????????????upX=(int)?event.getX();//取得松开时的坐标??
  37. ????????????????????int?index=0;??????????????????????if(upX-downX>100)//从左拖到右,即看前一张??
  38. ????????????????????{??????????????????????????//如果是第一,则去到尾部??
  39. ????????????????????????if(gallery.getSelectedItemPosition()==0)?????????????????????????????index=gallery.getCount()-1;??
  40. ????????????????????????else??????????????????????????????index=gallery.getSelectedItemPosition()-1;??
  41. ????????????????????}??????????????????????else?if(downX-upX>100)//从右拖到左,即看后一张??
  42. ????????????????????{??????????????????????????//如果是最后,则去到第一??
  43. ????????????????????????if(gallery.getSelectedItemPosition()==(gallery.getCount()-1))??????????????????????????????index=0;??
  44. ????????????????????????else??????????????????????????????index=gallery.getSelectedItemPosition()+1;??
  45. ????????????????????}??????????????????????//改变gallery图片所选,自动触发ImageSwitcher的setOnItemSelectedListener??
  46. ????????????????????gallery.setSelection(index,?true);??????????????????????return?true;??
  47. ????????????????}??????????????????return?false;??
  48. ????????????}????????????????
  49. ????????});????????????
  50. ????????//设置gallery控件??????????gallery?=?(Gallery)?findViewById(R.id.gallery);??
  51. ????????gallery.setAdapter(new?ImageAdapter(this));??????????gallery.setOnItemSelectedListener(new?OnItemSelectedListener(){??
  52. ????????????@Override??????????????public?void?onItemSelected(AdapterView<?>?arg0,?View?arg1,??
  53. ????????????????????int?position,?long?arg3)?{??????????????????is.setImageResource(imgList.get(position));??
  54. ????????????}??????????????@Override??
  55. ????????????public?void?onNothingSelected(AdapterView<?>?arg0)?{??????????????????//?TODO?Auto-generated?method?stub??
  56. ????????????}????????????????
  57. ????????});??????}??
  58. ????//设置ImgaeSwitcher??????@Override??
  59. ????public?View?makeView()?{??????????ImageView?i?=?new?ImageView(this);??
  60. ????????i.setBackgroundColor(0xFF000000);??????????i.setScaleType(ImageView.ScaleType.CENTER);//居中??
  61. ????????i.setLayoutParams(new?ImageSwitcher.LayoutParams(//自适应图片大小??????????????????LayoutParams.FILL_PARENT,?LayoutParams.FILL_PARENT));??
  62. ????????return?i;??????}??
  63. ????public?class?ImageAdapter?extends?BaseAdapter?{??????????public?ImageAdapter(Context?c)?{??
  64. ????????????mContext?=?c;??????????}??
  65. ????????public?int?getCount()?{??????????????return?imgList.size();??
  66. ????????}??????????public?Object?getItem(int?position)?{??
  67. ????????????return?position;??????????}??
  68. ????????public?long?getItemId(int?position)?{??????????????return?position;??
  69. ????????}??????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{??
  70. ????????????ImageView?i?=?new?ImageView(mContext);??????????????i.setImageResource(imgList.get(position));??
  71. ????????????i.setAdjustViewBounds(true);??????????????i.setLayoutParams(new?Gallery.LayoutParams(??
  72. ????????????????????LayoutParams.WRAP_CONTENT,?LayoutParams.WRAP_CONTENT));??????????????return?i;??
  73. ????????}??????????private?Context?mContext;??
  74. ????}????
  75. }?

热点排行