Android 基于ImageSwitcher实现的左右切换图片

左右切换图片控件大家都用ViewPager, ViewFipper比较多吧,我之前也用ViewPager实现了,使用ViewPager实现左右循环滑动图片,有兴趣的可以去看下,今天介绍的是基于ImageSwitcher实现的左右切换图片,先上截图吧

好了,接下来来看代码吧,第一张图是一个GridView,点击item跳转到第二个界面,第一个界面可以忽略,主要是讲解ImageSwitcher的左右却换图片,先看布局文件

[html] view
plain
copy

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent" >  
  5.     <ImageSwitcher  
  6.         android:id="@+id/imageSwitcher1"  
  7.         android:layout_width="fill_parent"  
  8.         android:layout_height="fill_parent">  
  9.     </ImageSwitcher>  
  10.       
  11.     <RelativeLayout      
  12.         android:layout_width="fill_parent"      
  13.         android:layout_height="wrap_content"     
  14.         android:orientation="vertical" >      
  15.         <LinearLayout      
  16.             android:id="@+id/viewGroup"      
  17.             android:layout_width="fill_parent"      
  18.             android:layout_height="wrap_content"      
  19.             android:layout_alignParentBottom="true"     
  20.             android:layout_marginBottom="30dp"      
  21.             android:gravity="center_horizontal"      
  22.             android:orientation="horizontal" >      
  23.         </LinearLayout>      
  24.     </RelativeLayout>  
  25. </FrameLayout>  

然后就是Activity代码啦,总体来说比较简单,代码我添加了注释

[java] view
plain
copy

  1. package com.example.photoalbum;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.MotionEvent;  
  6. import android.view.View;  
  7. import android.view.View.OnTouchListener;  
  8. import android.view.ViewGroup;  
  9. import android.view.animation.AnimationUtils;  
  10. import android.widget.ImageSwitcher;  
  11. import android.widget.ImageView;  
  12. import android.widget.LinearLayout;  
  13. import android.widget.RelativeLayout.LayoutParams;  
  14. import android.widget.Toast;  
  15. import android.widget.ViewSwitcher.ViewFactory;  
  16.   
  17. public class ShowPhotoActivity extends Activity implements ViewFactory, OnTouchListener{  
  18.     /** 
  19.      * ImagaSwitcher 的引用 
  20.      */  
  21.     private ImageSwitcher mImageSwitcher;  
  22.     /** 
  23.      * 图片id数组 
  24.      */  
  25.     private int[] imgIds;  
  26.     /** 
  27.      * 当前选中的图片id序号 
  28.      */  
  29.     private int currentPosition;  
  30.     /** 
  31.      * 按下点的X坐标 
  32.      */  
  33.     private float downX;  
  34.     /** 
  35.      * 装载点点的容器 
  36.      */  
  37.     private LinearLayout linearLayout;  
  38.     /** 
  39.      * 点点数组 
  40.      */  
  41.     private ImageView[] tips;  
  42.    
  43.     @Override  
  44.     protected void onCreate(Bundle savedInstanceState) {  
  45.         super.onCreate(savedInstanceState);  
  46.         setContentView(R.layout.show_photo);  
  47.           
  48.         imgIds = new int[]{R.drawable.item01,R.drawable.item02,R.drawable.item03,R.drawable.item04,  
  49.                 R.drawable.item05, R.drawable.item06, R.drawable.item07, R.drawable.item08,R.drawable.item09,  
  50.                 R.drawable.item10, R.drawable.item11, R.drawable.item12};  
  51.         //实例化ImageSwitcher  
  52.         mImageSwitcher  = (ImageSwitcher) findViewById(R.id.imageSwitcher1);  
  53.         //设置Factory  
  54.         mImageSwitcher.setFactory(this);  
  55.         //设置OnTouchListener,我们通过Touch事件来切换图片  
  56.         mImageSwitcher.setOnTouchListener(this);  
  57.           
  58.         linearLayout = (LinearLayout) findViewById(R.id.viewGroup);  
  59.           
  60.         tips = new ImageView[imgIds.length];  
  61.         for(int i=0; i<imgIds.length; i++){  
  62.             ImageView mImageView = new ImageView(this);  
  63.             tips[i] = mImageView;  
  64.             LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,      
  65.                     LayoutParams.WRAP_CONTENT));    
  66.             layoutParams.rightMargin = 3;  
  67.             layoutParams.leftMargin = 3;  
  68.               
  69.             mImageView.setBackgroundResource(R.drawable.page_indicator_unfocused);  
  70.             linearLayout.addView(mImageView, layoutParams);  
  71.         }  
  72.           
  73.         //这个我是从上一个界面传过来的,上一个界面是一个GridView  
  74.         currentPosition = getIntent().getIntExtra("position", 0);  
  75.         mImageSwitcher.setImageResource(imgIds[currentPosition]);  
  76.           
  77.         setImageBackground(currentPosition);  
  78.           
  79.     }  
  80.       
  81.      /**  
  82.      * 设置选中的tip的背景  
  83.      * @param selectItems  
  84.      */    
  85.     private void setImageBackground(int selectItems){    
  86.         for(int i=0; i<tips.length; i++){    
  87.             if(i == selectItems){    
  88.                 tips[i].setBackgroundResource(R.drawable.page_indicator_focused);    
  89.             }else{    
  90.                 tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);    
  91.             }    
  92.         }    
  93.     }   
  94.   
  95.     @Override  
  96.     public View makeView() {  
  97.         final ImageView i = new ImageView(this);  
  98.         i.setBackgroundColor(0xff000000);  
  99.         i.setScaleType(ImageView.ScaleType.CENTER_CROP);  
  100.         i.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
  101.         return i ;  
  102.     }  
  103.   
  104.     @Override  
  105.     public boolean onTouch(View v, MotionEvent event) {  
  106.         switch (event.getAction()) {  
  107.         case MotionEvent.ACTION_DOWN:{  
  108.             //手指按下的X坐标  
  109.             downX = event.getX();  
  110.             break;  
  111.         }  
  112.         case MotionEvent.ACTION_UP:{  
  113.             float lastX = event.getX();  
  114.             //抬起的时候的X坐标大于按下的时候就显示上一张图片  
  115.             if(lastX > downX){  
  116.                 if(currentPosition > 0){  
  117.                     //设置动画,这里的动画比较简单,不明白的去网上看看相关内容  
  118.                     mImageSwitcher.setInAnimation(AnimationUtils.loadAnimation(getApplication(), R.anim.left_in));  
  119.                     mImageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(getApplication(), R.anim.right_out));  
  120.                     currentPosition --;  
  121.                     mImageSwitcher.setImageResource(imgIds[currentPosition % imgIds.length]);  
  122.                     setImageBackground(currentPosition);  
  123.                 }else{  
  124.                     Toast.makeText(getApplication(), "已经是第一张", Toast.LENGTH_SHORT).show();  
  125.                 }  
  126.             }   
  127.               
  128.             if(lastX < downX){  
  129.                 if(currentPosition < imgIds.length - 1){  
  130.                     mImageSwitcher.setInAnimation(AnimationUtils.loadAnimation(getApplication(), R.anim.right_in));  
  131.                     mImageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(getApplication(), R.anim.lift_out));  
  132.                     currentPosition ++ ;  
  133.                     mImageSwitcher.setImageResource(imgIds[currentPosition]);  
  134.                     setImageBackground(currentPosition);  
  135.                 }else{  
  136.                     Toast.makeText(getApplication(), "到了最后一张", Toast.LENGTH_SHORT).show();  
  137.                 }  
  138.             }  
  139.             }  
  140.               
  141.             break;  
  142.         }  
  143.   
  144.         return true;  
  145.     }  
  146.   
  147. }  

上面切换图片主要用到的就是动画了,用的是translate移动动画,不了解动画的同学到这里看看http://blog.csdn.net/xiaanming/article/details/8997260,我就不介绍了,接下来我吧动画代码贴出来,在res新建一个anim的目录,如下图

左边进入的动画,left_in.xml

[html] view
plain
copy

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate   
  4.         android:fromXDelta="-100%p"  
  5.         android:toXDelta="0"  
  6.         android:duration="500"/>  
  7. </set>  

左边出去的动画,left_out.xml

[html] view
plain
copy

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate   
  4.         android:fromXDelta="0"  
  5.         android:toXDelta="-100%p"  
  6.         android:duration="500"/>  
  7. </set>  

右边进入的动画,right_in.xml

[html] view
plain
copy

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate   
  4.         android:fromXDelta="100%p"  
  5.         android:toXDelta="0"  
  6.         android:duration="500"/>  
  7. </set>  

右边出去的动画,right_out.xml

[html] view
plain
copy

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate   
  4.         android:fromXDelta="0"  
  5.         android:toXDelta="100%p"  
  6.         android:duration="500"/>  
  7. </set>  

好了,介绍完了,代码写的不是很好,写的不好的地方希望您指出,谢谢

代码下载

时间: 2024-09-19 05:35:30

Android 基于ImageSwitcher实现的左右切换图片的相关文章

Android基于ImageSwitcher实现图片切换功能_Android

左右切换图片控件大家都用ViewPager, ViewFipper比较多吧,我之前也用ViewPager实现了,使用ViewPager实现左右循环滑动图片,有兴趣的可以去看下,今天介绍的是基于ImageSwitcher实现的左右切换图片,先上截图吧 好了,接下来来看代码吧,第一张图是一个GridView,点击item跳转到第二个界面,第一个界面可以忽略,主要是讲解ImageSwitcher的左右却换图片,先看布局文件 <?xml version="1.0" encoding=&q

android ListView加HeadView左右切换图片(类似各大新闻客户端)

         我简单的介绍下实现方法:其实就是listview addHeaderView.只不过这个view是一个可以切换图片的view,至于这个view怎么做,就要根据自己的喜爱了,实现有多种方法,下面我简单介绍一下. 第一种:ViewFlipper+GestureDetector 主布局就是一个listview,这里就不介绍了,我介绍下切换图片布局 head_iamge.xml <?xml version="1.0" encoding="utf-8"

Android游戏开发:实现手势操作切换图片的实例_Android

       对于Android 的手势不光在软件中会经常用到,比如浏览器中的翻页,滚动页面等等;当然其实在我们开发Android游戏的时候加上了Android手势操作更会让游戏增加一个亮点,比如一般的CAG.PUZ等类型的游戏选择关卡.简单背景的移动等,都可以使用手势来操作即可,类似前段时间很火的<愤怒的小鸟>,小鸟这个游戏确实不错,我所看到的唯一的亮点是这款游戏的创意!说实话,现在的游戏没有做不出来的只有想不出来的好创意.回到话题来,那么下面我们来了解下什么是Android 手势!    

Android基于SoftReference缓存图片的方法_Android

本文实例讲述了Android基于SoftReference缓存图片的方法.分享给大家供大家参考,具体如下: Java中的SoftReference即对象的软引用.如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它:如果内存空间不足了,就会回收这些对象的内存.只要垃圾回收器没有回收它,该对象就可以被程序使用.软引用可用来实现内存敏感的高速缓存.使用软引用能防止内存泄露,增强程序的健壮性. SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃

Android基于SoftReference缓存图片的方法

本文实例讲述了Android基于SoftReference缓存图片的方法.分享给大家供大家参考,具体如下: Java中的SoftReference即对象的软引用.如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它:如果内存空间不足了,就会回收这些对象的内存.只要垃圾回收器没有回收它,该对象就可以被程序使用.软引用可用来实现内存敏感的高速缓存.使用软引用能防止内存泄露,增强程序的健壮性. SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃

图片-Android中 界面加入计时器 来回切换的过程中 数字跳转的速度越来越快 求解决

问题描述 Android中 界面加入计时器 来回切换的过程中 数字跳转的速度越来越快 求解决 Fragment + ViewPager 切换中 求解决 是他一起在生成新的 让handler多次执行吗 要加判断还是怎么写 求大神帮忙 解决方案 handler 没出完整 我觉得是计时器写法问题啊 他一直在生成新的 要加判断吗 还是 写try catch? 解决方案二: 我没有写过安卓,但根据经验,计时器越来越快的一个原因可能是刷新的时候,前一个计时器没有清空 解决方案三: 多个timer在发送msg

【Android开发】高级组件-图像切换器

图像切换器(ImageSwitcher),用于实现类似于Windows操作系统的"Windows照片查看器"中的上一张.下一张切换图片的功能.在使用ImageSwitcher时,必须实现ViewSwitcher.ViewFactory接口,并通过makeView()方法来创建用于显示图片的ImageView.makeView()方法将返回一个显示图片的ImageView.在使用图像切换器时,还有一个方法非常重要,那就是setImageResource方法,该方法用于指定要在ImageS

Android之ImageSwitcher的实例详解

Android之ImageSwitcher的实例详解 一. 简单示例 实例代码: public class AndroidUIActivity extends Activity { // 当前显示的图片索引 private int index; // 图片数组 private int[] images = { R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5

jquery淡化版banner异步图片文字效果切换图片特效

 全屏淡入淡出简洁banner,异步图片文字效果切换图片特效,需要的朋友可以参考下  代码如下: <pre code_snippet_id="280064" snippet_file_name="blog_20140408_1_8982765" name="code" class="html"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti