ViewPager加ImageView图片浏览中点击ImageView结束查看

原文地址:http://blog.csdn.net/wangyuexing_blog/article/details/21962289


因为在ViewPager中设置ImageView的点击事件来finish Activity 有时候会误操作,用户体验不好,本来用户是滑动ViewPager查看下一张图片的,但ImageView的点击事件会响应,从而关闭了整个页面。


接下来,我们用另一种方式实现点击结束activity的效果,和ViewPager搭配算是比较完美,既不影响用户左右滑动浏览,在需要关闭页面时,触摸一下屏幕就会关闭activity。


实现ImageView的touch事件:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1.          iv.setOnTouchListener(new OnTouchListener()  
  2. {  
  3.       
  4.     @Override  
  5.     public boolean onTouch(View v, MotionEvent event)  
  6.     {  
  7.           
  8.         switch (event.getAction())  
  9.         {  
  10.         case MotionEvent.ACTION_DOWN:  
  11.             isClose = true;  
  12.             startPoint.set(event.getX(), event.getY());   
  13.             break;  
  14.         case MotionEvent.ACTION_MOVE:  
  15.               
  16.             if(Math.abs((event.getX() - startPoint.x)) > DensityUtil.dip2px(context, 5)  
  17.                     || Math.abs((event.getY() - startPoint.y)) > DensityUtil.dip2px(context, 5))  
  18.             {  
  19.                 isClose = false;  
  20.             }  
  21.               
  22.             break;  
  23.         case MotionEvent.ACTION_UP:  
  24.             if(isClose)  
  25.             {  
  26.                 finish();  
  27.                 overridePendingTransition(R.anim.default_anim_out, R.anim.anim_stay);  
  28.             }  
  29.             break;  
  30.   
  31.         default:  
  32.             break;  
  33.         }  
  34.           
  35.         return true;  
  36.     }  
  37. });  

申明全局变量:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 觸摸ImageView是否finish Activity */  
  2. private boolean isClose;  
  3. /** 觸屏的第一點坐標 */  
  4. private PointF startPoint = new PointF();  

附上工具类 DensityUtil.java:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import android.content.Context;  
  2.   
  3. /** 
  4.  * 功能描述:单位转换工具类 
  5.  *  
  6.  * @author android_ls 
  7.  *  
  8.  */  
  9. public class DensityUtil  
  10. {  
  11.   
  12.     /** 
  13.      * 将单位为dip的值转换成单位为px的值 
  14.      *  
  15.      * @param context 
  16.      *            Context 
  17.      * @param dipValue 
  18.      *            dip值 
  19.      * @return px值 
  20.      */  
  21.     public static int dip2px(Context context, float dipValue)  
  22.     {  
  23.         final float scale = context.getResources().getDisplayMetrics().density;  
  24.         return (int) (dipValue * scale + 0.5f);  
  25.     }  
  26.   
  27.     /** 
  28.      * 将单位为px的值转换成单位为dip的值 
  29.      *  
  30.      * @param context 
  31.      *            Context 
  32.      * @param pxValue 
  33.      *            像素值 
  34.      * @return dip值 
  35.      */  
  36.     public static int px2dip(Context context, float pxValue)  
  37.     {  
  38.         final float scale = context.getResources().getDisplayMetrics().density;  
  39.         return (int) (pxValue / scale + 0.5f);  
  40.     }  
  41.   
  42.     /** 
  43.      * 将px值转换为sp值,保证文字大小不变 
  44.      *  
  45.      * @param pxValue 
  46.      * @param fontScale (DisplayMetrics类中属性scaledDensity) 
  47.      * @return 
  48.      */  
  49.     public static int px2sp(Context context, float pxValue)  
  50.     {  
  51.         final float scale = context.getResources().getDisplayMetrics().density;  
  52.         return (int) (pxValue / scale + 0.5f);  
  53.     }  
  54.   
  55.     /** 
  56.      * 将sp值转换为px值,保证文字大小不变 
  57.      *  
  58.      * @param spValue 
  59.      * @param fontScale 
  60.      *            (DisplayMetrics类中属性scaledDensity) 
  61.      * @return 
  62.      */  
  63.     public static int sp2px(Context context, float spValue)  
  64.     {  
  65.         final float scale = context.getResources().getDisplayMetrics().density;  
  66.         return (int) (spValue * scale + 0.5f);  
  67.     }  
  68. }  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值