Android入门户十三篇之Gallery + ImageSwitcher
Android入门第十三篇之Gallery + ImageSwitcher上次讲了如何使用Gallery控件,这次就讲Gallery 与ImageSwit
Android入门第十三篇之Gallery + ImageSwitcher
上次讲了如何使用Gallery控件,这次就讲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?
- package?com.testImageView;??import?java.lang.reflect.Field;??
- import?java.util.ArrayList;??import?android.app.Activity;??
- import?android.content.Context;??import?android.os.Bundle;??
- import?android.view.MotionEvent;??import?android.view.View;??
- import?android.view.View.OnTouchListener;??import?android.view.ViewGroup;??
- import?android.view.animation.AnimationUtils;??import?android.widget.AdapterView;??
- import?android.widget.BaseAdapter;??import?android.widget.Gallery;??
- import?android.widget.ImageSwitcher;??import?android.widget.ImageView;??
- import?android.widget.AdapterView.OnItemSelectedListener;??import?android.widget.Gallery.LayoutParams;??
- import?android.widget.ViewSwitcher.ViewFactory;??public?class?testImageView?extends?Activity?implements?ViewFactory?{??
- ????private?ImageSwitcher?is;??????private?Gallery?gallery;??
- ????private?int?downX,upX;??????private?ArrayList<Integer>?imgList=new?ArrayList<Integer>();//图像ID??
- ??????????@Override??
- ????protected?void?onCreate(Bundle?savedInstanceState)?{??????????//?TODO?Auto-generated?method?stub??
- ????????super.onCreate(savedInstanceState);??????????setContentView(R.layout.main);??
- ????????//用反射机制来获取资源中的图片ID??????????Field[]?fields?=?R.drawable.class.getDeclaredFields();??
- ????????for?(Field?field?:?fields)??????????{??
- ????????????if?(!"icon".equals(field.getName()))//除了icon之外的图片??????????????{?????
- ????????????????int?index?=?0;??????????????????try?{??
- ????????????????????index?=?field.getInt(R.drawable.class);??????????????????}?catch?(IllegalArgumentException?e)?{??
- ????????????????????//?TODO?Auto-generated?catch?block??????????????????????e.printStackTrace();??
- ????????????????}?catch?(IllegalAccessException?e)?{??????????????????????//?TODO?Auto-generated?catch?block??
- ????????????????????e.printStackTrace();??????????????????}??
- ????????????????//保存图片ID??????????????????imgList.add(index);??
- ????????????}??????????}??
- ??????????????????//设置ImageSwitcher控件??
- ????????is?=?(ImageSwitcher)?findViewById(R.id.switcher);??????????is.setFactory(this);??
- ????????is.setInAnimation(AnimationUtils.loadAnimation(this,??????????????????android.R.anim.fade_in));??
- ????????is.setOutAnimation(AnimationUtils.loadAnimation(this,??????????????????android.R.anim.fade_out));??
- ????????is.setOnTouchListener(new?OnTouchListener(){??????????????/*?
- ?????????????*?在ImageSwitcher控件上滑动可以切换图片??????????????*/??
- ????????????@Override??????????????public?boolean?onTouch(View?v,?MotionEvent?event)?{??
- ????????????????if(event.getAction()==MotionEvent.ACTION_DOWN)??????????????????{??
- ????????????????????downX=(int)?event.getX();//取得按下时的坐标??????????????????????return?true;??
- ????????????????}??????????????????else?if(event.getAction()==MotionEvent.ACTION_UP)??
- ????????????????{??????????????????????upX=(int)?event.getX();//取得松开时的坐标??
- ????????????????????int?index=0;??????????????????????if(upX-downX>100)//从左拖到右,即看前一张??
- ????????????????????{??????????????????????????//如果是第一,则去到尾部??
- ????????????????????????if(gallery.getSelectedItemPosition()==0)?????????????????????????????index=gallery.getCount()-1;??
- ????????????????????????else??????????????????????????????index=gallery.getSelectedItemPosition()-1;??
- ????????????????????}??????????????????????else?if(downX-upX>100)//从右拖到左,即看后一张??
- ????????????????????{??????????????????????????//如果是最后,则去到第一??
- ????????????????????????if(gallery.getSelectedItemPosition()==(gallery.getCount()-1))??????????????????????????????index=0;??
- ????????????????????????else??????????????????????????????index=gallery.getSelectedItemPosition()+1;??
- ????????????????????}??????????????????????//改变gallery图片所选,自动触发ImageSwitcher的setOnItemSelectedListener??
- ????????????????????gallery.setSelection(index,?true);??????????????????????return?true;??
- ????????????????}??????????????????return?false;??
- ????????????}????????????????
- ????????});????????????
- ????????//设置gallery控件??????????gallery?=?(Gallery)?findViewById(R.id.gallery);??
- ????????gallery.setAdapter(new?ImageAdapter(this));??????????gallery.setOnItemSelectedListener(new?OnItemSelectedListener(){??
- ????????????@Override??????????????public?void?onItemSelected(AdapterView<?>?arg0,?View?arg1,??
- ????????????????????int?position,?long?arg3)?{??????????????????is.setImageResource(imgList.get(position));??
- ????????????}??????????????@Override??
- ????????????public?void?onNothingSelected(AdapterView<?>?arg0)?{??????????????????//?TODO?Auto-generated?method?stub??
- ????????????}????????????????
- ????????});??????}??
- ????//设置ImgaeSwitcher??????@Override??
- ????public?View?makeView()?{??????????ImageView?i?=?new?ImageView(this);??
- ????????i.setBackgroundColor(0xFF000000);??????????i.setScaleType(ImageView.ScaleType.CENTER);//居中??
- ????????i.setLayoutParams(new?ImageSwitcher.LayoutParams(//自适应图片大小??????????????????LayoutParams.FILL_PARENT,?LayoutParams.FILL_PARENT));??
- ????????return?i;??????}??
- ????public?class?ImageAdapter?extends?BaseAdapter?{??????????public?ImageAdapter(Context?c)?{??
- ????????????mContext?=?c;??????????}??
- ????????public?int?getCount()?{??????????????return?imgList.size();??
- ????????}??????????public?Object?getItem(int?position)?{??
- ????????????return?position;??????????}??
- ????????public?long?getItemId(int?position)?{??????????????return?position;??
- ????????}??????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{??
- ????????????ImageView?i?=?new?ImageView(mContext);??????????????i.setImageResource(imgList.get(position));??
- ????????????i.setAdjustViewBounds(true);??????????????i.setLayoutParams(new?Gallery.LayoutParams(??
- ????????????????????LayoutParams.WRAP_CONTENT,?LayoutParams.WRAP_CONTENT));??????????????return?i;??
- ????????}??????????private?Context?mContext;??
- ????}????
- }?