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

Android进门第十三篇之Gallery + ImageSwitcher

2013-11-09 
Android入门第十三篇之Gallery + ImageSwitcher?? 本文来自http://blog.csdn.net/hellogv/ ,引用必须注明

Android入门第十三篇之Gallery + ImageSwitcher

?? 本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

?????? 上次讲了如何使用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>  

??

程序的源码如下:

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;      }    }  

?

?

热点排行