ViewPager添ImageView图片浏览中点击ImageView结束查看
ViewPager加ImageView图片浏览中点击ImageView结束查看
申明全局变量:
附上工具类 DensityUtil.java:
因为在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); } }