先说项目需求
1, 图片浏览器
2,预览为网格状
3,点击图片进入全屏放大
4,进入图片后可以进行左右滑动切换图片
5,点击放大后的图片出现exit按钮。
前面1.2.3就不说了,很简单就能实现,至于4我用的是ViewPager,到这里基本功能就实现了,这时候问题也来了。。。
首先如下图 (请原谅这些马赛克!!!):
第一个条目为相机,那么当Viewpager滑动到position为0时就会是默认图片,而这个时候是不应该显示图片的,也就是说当position为1时禁止右滑了。说起来简单,这个时候一查资料基本都是禁止滑动,与需求不符,最后则在dispatchTouchEvent中处理,上代码
/**
* 因第一个条目为相机,到第二个条目禁止右滑
* @param ev
* @return
*/
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
beforeX = ev.getX();
break;
case MotionEvent.ACTION_MOVE:
float motionValue = ev.getX() - beforeX;
if (motionValue > 0 && mViewPager.getCurrentItem() == 1) {//禁止右滑
return true;
}
beforeX = ev.getX();//手指移动时,再把当前的坐标作为下一次的‘上次坐标’,
break;
default:
break;
}
return super.dispatchTouchEvent(ev);
}
这个问题得以解决,记得更新起始坐标,beforeX = ev.getX();//手指移动时,再把当前的坐标作为下一次的‘上次坐标’
好了,下面就是Viewpager的点击了,一开始设置了onclik事件,可是viewpager这时候不能滑动了,再想办法,发现还有个方法,那就是触摸事件,试了一下,果然不拦截滑动了。
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
firstX = event.getX();
break;
case MotionEvent.ACTION_MOVE:
secondX = event.getX();
break;
case MotionEvent.ACTION_UP:
if (Math.abs(secondX - firstX) == 0) {
if (isBtnShow) { // 隐藏--显示
btnExit.setVisibility(View.GONE);
isBtnShow = false;
} else { // 显示--隐藏
btnExit.setVisibility(View.VISIBLE);
isBtnShow = true;
}
return false;
}
break;
default:
break;
}
return false;
}
这就是遇到的两个难点(相对我个人而言),不明白的朋友咱们再讨论,如有错误,不好之处请批评改正!