本文来自http://blog.youkuaiyun.com/hellogv/,引用必须注明出处!
上次讲了如何使用Gallery控件,这次就讲Gallery 与ImageSwitcher的结合使用,本文实现一个简单的浏览图片的功能。先贴出程序运行截图:
除了Gallery可以拖拉切换图片,我在ImageSwitcher控件加入了setOnTouchListener事件实现,使得ImageSwitcher也可以在拖拉中切换图片。本例子依然使用JAVA的反射机制来自动读取资源中的图片。
main.xml的源码如下:
- <?xmlversion="1.0"encoding="utf-8"?>
- <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <ImageSwitcherandroid:id="@+id/switcher"
- android:layout_width="match_parent"android:layout_height="match_parent"/>
- <Galleryandroid: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>
程序的源码如下:
- packagecom.testImageView;
- importjava.lang.reflect.Field;
- importjava.util.ArrayList;
- importandroid.app.Activity;
- importandroid.content.Context;
- importandroid.os.Bundle;
- importandroid.view.MotionEvent;
- importandroid.view.View;
- importandroid.view.View.OnTouchListener;
- importandroid.view.ViewGroup;
- importandroid.view.animation.AnimationUtils;
- importandroid.widget.AdapterView;
- importandroid.widget.BaseAdapter;
- importandroid.widget.Gallery;
- importandroid.widget.ImageSwitcher;
- importandroid.widget.ImageView;
- importandroid.widget.AdapterView.OnItemSelectedListener;
- importandroid.widget.Gallery.LayoutParams;
- importandroid.widget.ViewSwitcher.ViewFactory;
- publicclasstestImageViewextendsActivityimplementsViewFactory{
- privateImageSwitcheris;
- privateGallerygallery;
- privateintdownX,upX;
- privateArrayList<Integer>imgList=newArrayList<Integer>();//图像ID
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- //TODOAuto-generatedmethodstub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //用反射机制来获取资源中的图片ID
- Field[]fields=R.drawable.class.getDeclaredFields();
- for(Fieldfield:fields)
- {
- if(!"icon".equals(field.getName()))//除了icon之外的图片
- {
- intindex=0;
- try{
- index=field.getInt(R.drawable.class);
- }catch(IllegalArgumentExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(IllegalAccessExceptione){
- //TODOAuto-generatedcatchblock
- 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(newOnTouchListener(){
- /*
- *在ImageSwitcher控件上滑动可以切换图片
- */
- @Override
- publicbooleanonTouch(Viewv,MotionEventevent){
- if(event.getAction()==MotionEvent.ACTION_DOWN)
- {
- downX=(int)event.getX();//取得按下时的坐标
- returntrue;
- }
- elseif(event.getAction()==MotionEvent.ACTION_UP)
- {
- upX=(int)event.getX();//取得松开时的坐标
- intindex=0;
- if(upX-downX>100)//从左拖到右,即看前一张
- {
- //如果是第一,则去到尾部
- if(gallery.getSelectedItemPosition()==0)
- index=gallery.getCount()-1;
- else
- index=gallery.getSelectedItemPosition()-1;
- }
- elseif(downX-upX>100)//从右拖到左,即看后一张
- {
- //如果是最后,则去到第一
- if(gallery.getSelectedItemPosition()==(gallery.getCount()-1))
- index=0;
- else
- index=gallery.getSelectedItemPosition()+1;
- }
- //改变gallery图片所选,自动触发ImageSwitcher的setOnItemSelectedListener
- gallery.setSelection(index,true);
- returntrue;
- }
- returnfalse;
- }
- });
- //设置gallery控件
- gallery=(Gallery)findViewById(R.id.gallery);
- gallery.setAdapter(newImageAdapter(this));
- gallery.setOnItemSelectedListener(newOnItemSelectedListener(){
- @Override
- publicvoidonItemSelected(AdapterView<?>arg0,Viewarg1,
- intposition,longarg3){
- is.setImageResource(imgList.get(position));
- }
- @Override
- publicvoidonNothingSelected(AdapterView<?>arg0){
- //TODOAuto-generatedmethodstub
- }
- });
- }
- //设置ImgaeSwitcher
- @Override
- publicViewmakeView(){
- ImageViewi=newImageView(this);
- i.setBackgroundColor(0xFF000000);
- i.setScaleType(ImageView.ScaleType.CENTER);//居中
- i.setLayoutParams(newImageSwitcher.LayoutParams(//自适应图片大小
- LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
- returni;
- }
- publicclassImageAdapterextendsBaseAdapter{
- publicImageAdapter(Contextc){
- mContext=c;
- }
- publicintgetCount(){
- returnimgList.size();
- }
- publicObjectgetItem(intposition){
- returnposition;
- }
- publiclonggetItemId(intposition){
- returnposition;
- }
- publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
- ImageViewi=newImageView(mContext);
- i.setImageResource(imgList.get(position));
- i.setAdjustViewBounds(true);
- i.setLayoutParams(newGallery.LayoutParams(
- LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
- returni;
- }
- privateContextmContext;
- }
- }