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


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

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

实现ImageView的touch事件:

iv.setOnTouchListener(new OnTouchListener()
      {
        
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
          
          switch (event.getAction())
          {
          case MotionEvent.ACTION_DOWN:
            isClose = true;
            startPoint.set(event.getX(), event.getY()); 
            break;
          case MotionEvent.ACTION_MOVE:
            
            if(Math.abs((event.getX() - startPoint.x)) > DensityUtil.dip2px(context, 5)
                || Math.abs((event.getY() - startPoint.y)) > DensityUtil.dip2px(context, 5))
            {
              isClose = false;
            }
            
            break;
          case MotionEvent.ACTION_UP:
            if(isClose)
            {
              finish();
              overridePendingTransition(R.anim.default_anim_out, R.anim.anim_stay);
            }
            break;

          default:
            break;
          }
          
          return true;
        }
      });
申明全局变量:
/** 觸摸ImageView是否finish Activity */
    private boolean isClose;
    /** 觸屏的第一點坐標 */
    private PointF startPoint = new PointF();
附上工具类 DensityUtil.java:
import android.content.Context;

/**
 * 功能描述:单位转换工具类
 * 
 * @author android_ls
 * 
 */
public class DensityUtil
{

  /**
   * 将单位为dip的值转换成单位为px的值
   * 
   * @param context
   *            Context
   * @param dipValue
   *            dip值
   * @return px值
   */
  public static int dip2px(Context context, float dipValue)
  {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (dipValue * scale + 0.5f);
  }

  /**
   * 将单位为px的值转换成单位为dip的值
   * 
   * @param context
   *            Context
   * @param pxValue
   *            像素值
   * @return dip值
   */
  public static int px2dip(Context context, float pxValue)
  {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (pxValue / scale + 0.5f);
  }

  /**
   * 将px值转换为sp值,保证文字大小不变
   * 
   * @param pxValue
   * @param fontScale (DisplayMetrics类中属性scaledDensity)
   * @return
   */
  public static int px2sp(Context context, float pxValue)
  {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (pxValue / scale + 0.5f);
  }

  /**
   * 将sp值转换为px值,保证文字大小不变
   * 
   * @param spValue
   * @param fontScale
   *            (DisplayMetrics类中属性scaledDensity)
   * @return
   */
  public static int sp2px(Context context, float spValue)
  {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (spValue * scale + 0.5f);
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值