网上抄的代码不太完美,总有些小问题,之前是无法更新GridView,现在又发现如果点中可点击的控件(按钮,图片等),再拖动,无法实现划屏效果.这两个问题折腾了我大半天,研究了会事件传递机制后,解决. 之所以出现上面的问题,是因为在onInterceptTouchEvent方法中,自动传递事件给相应的控件,我们重写该方法,自己判断该不该划屏即可.默认情况下,在非可点击控件上划,只会触发onTouchEvent,不会触发onInterceptTouchEvent,所以onTouchEvent里也需要判断划屏的方法.
// 按下时x座标
private float startX = 0;
// 最终x座标
private float endx = 0;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
int what = ev.getAction();
System.out.println("what" + what);
switch (what) {
case MotionEvent.ACTION_DOWN:
startX = ev.getX();
break;
}
endx = ev.getX();
if (endx - startX > 150)// 距离超过150
{
// 返回true,会传给onTouchEvent方法
snapToScreen(mCurScreen - 1);
startX = endx;
} else if (endx - startX < -150) {
snapToScreen(mCurScreen + 1);
startX = endx;
}
// 默认传递,其实就是传给相应的控件
return super.onInterceptTouchEvent(ev);
}