现在的位置: 首页 > 综合 > 正文

Android入门/ImageSwitcher(十四)

2018年05月26日 ⁄ 综合 ⁄ 共 4959字 ⁄ 字号 评论关闭

public class

ImageSwitcher  图片切换器

extends
ViewSwitcher

java.lang.Object
   ↳ android.view.View

   ↳ android.view.ViewGroup


   ↳ android.widget.FrameLayout



   ↳ android.widget.ViewAnimator




   ↳ android.widget.ViewSwitcher





   ↳ android.widget.ImageSwitcher

 ImageSwitecher 与 Gallery的使用

1. 
准备UI界面
  包括setContentView() ,    Find Widget

2. 
准备数据源
  , 使用  R.drawable.class.getDeclaredFields() 反射机制获取资源中的图片

3. 
生成适配器 
重写getView()方法 ,适应Gallery 滑动

4.  Gallery的 Items 点击事件处理 , 设置ImageSwitcher显示资源

5.
设置ImageSwitcher的 makeView方法 , 设置相关的动画效果

6.
设置
ImageSwitcher的 Click事件 ,适应于Gallery同时滑动

 相关注释在 java代码中写的很详细,如有错误还请指出.

3个ImageSwitcher的 重要方法

public voidsetImageDrawable
(Drawable drawable) 绘制图片

public voidsetImageResource
(int resid)设置资源

public voidsetImageURI
(Uri uri)设置图片地址

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>
   

Java代码

public class Main extends Activity implements ViewFactory 
{
	private ImageSwitcher is;	//ViewSwitcher适用于两个视图带动画效果的切换。
	private Gallery gallery;
	private int downX,upX;
    private ArrayList<Integer> imgList=new ArrayList<Integer>();//图像ID
    
		protected void onCreate(Bundle savedInstanceState) {
	
			super.onCreate(savedInstanceState);
			
			PreInit();
			ImageIdUnit();
			ImageSwitchInit();
	    	GalleryInit();			
		}
			/* 
			 * 	作用是控制ImageSwitcher 视图的控制
			 *  */
			public View makeView() {
				ImageView i = new ImageView(this);
				i.setBackgroundColor(0xFF336699);
				i.setScaleType(ImageView.ScaleType.FIT_CENTER);
				i.setLayoutParams(new ImageSwitcher.LayoutParams(//自适应图片大小
						LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
				return i;
			}

			/**
			 * 用反射机制来获取资源中的图片ID
			 * */
			private void ImageIdUnit(){
				/**
				 * Field 类说明   这个类代表了一个字段/ 有关字段内的信息可以被访问,字段的值可以被动态的访问
				 * */
					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);// 返回指定对象的字段值 (int)
							} catch (IllegalArgumentException e) {
								e.printStackTrace();
							} catch (IllegalAccessException e) {
								e.printStackTrace();
							}
							//保存图片ID
							imgList.add(index);
						}
					}
			}
			/**
			 *  find widget
			 * */
			private void PreInit(){
				setContentView(R.layout.main);
				//设置ImageSwitcher控件  即设置中间的大图
				is = (ImageSwitcher) findViewById(R.id.switcher);
				//设置gallery控件
				gallery = (Gallery) findViewById(R.id.gallery);
			}
	
			/**
			 * 	ImageSwitcher  setting
			 * */
			private void ImageSwitchInit(){
				// 设置处理的视图  即当前Activity下的 ViewSwitcher控件
				is.setFactory(this);
				// 设置View进入的切换效果
				// AnimationUtils.loadAnimation()从资源加载动画对象
				is.setInAnimation(AnimationUtils.loadAnimation(this,
						android.R.anim.fade_in));
				// 设置View退出的切换效果
				is.setOutAnimation(AnimationUtils.loadAnimation(this,
						android.R.anim.fade_out));
				
				/**
				 * 在ImageSwitcher控件上滑动可以切换图片(即滑动中间的大图)
				 */
				is.setOnTouchListener(onTouchListener);
			}
			/**
			 * Gallery
			 * */
			private void GalleryInit(){
				
				ImageAdapter imgAdapter = new ImageAdapter(this);
				imgAdapter.setList(imgList);
				
				gallery.setAdapter(imgAdapter);
				
				
				//	点击Gallery的小图 在上方显示大图
				gallery.setOnItemSelectedListener(new OnItemSelectedListener(){
					@Override
					public void onItemSelected(AdapterView<?> arg0, View arg1,
							int position, long arg3) {
						// 在滑动Gallery时 在ImageSwitcher显示被点击的的资源
						is.setImageResource(imgList.get(position));// 资源id
					}
					@Override
					public void onNothingSelected(AdapterView<?> arg0) {
						// TODO Auto-generated method stub
					}
					
				});
			}
			// OnTouchListener 事件
			private OnTouchListener onTouchListener = new OnTouchListener() {
				
				public boolean onTouch(View v, MotionEvent event) {
					/**	
					 *  event.getAction() 返回任一一种正在执行行动 ;
					 */
					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
						Main.this.setTitle("Your Choose is "+index);
						// Gallery 设置position  所以ImageSwitcher 与 Gallery 是一起滑动的 
						gallery.setSelection(index, true);
						return true;
					}
					return false;
				}
			};
}

ImageAdapter.java

public class ImageAdapter extends BaseAdapter {
	private ArrayList<Integer> imgList;
	
	public void setList(ArrayList<Integer> list){
		this.imgList = list;
	}
	
	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;
	}
	// gallery 改变View
	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;
}


抱歉!评论已关闭.