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

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