在我的项目中使用onTouchEvent来检测屏幕上的触摸并相应地执行操作,并使用viewPager进行滑动操作。滑动问题是触摸操作正在执行。所以找到here 的解决方案解决了它。但我的新问题是,一旦TouchEvent.Action_up被执行,触摸就会被禁用。代码如下:
parent.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction())
{
case MotionEvent.ACTION_MOVE:
awesomePager.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
awesomePager.requestDisallowInterceptTouchEvent(true);
if(flag)
{
upperdock.setClickable(false);
upperdock.bringToFront();
tocparent.bringToFront();
tocbottom.bringToFront();
upperdock.setVisibility(RelativeLayout.VISIBLE);
tocparent.setVisibility(LinearLayout.VISIBLE);
tocbottom.setVisibility(LinearLayout.VISIBLE);
flag=false;
}
else
{
parent.bringToFront();
upperdock.setVisibility(RelativeLayout.INVISIBLE);
tocparent.setVisibility(LinearLayout.INVISIBLE);
tocbottom.setVisibility(LinearLayout.INVISIBLE);
flag=true;
}
break;
case MotionEvent.ACTION_CANCEL:
awesomePager.requestDisallowInterceptTouchEvent(false);
break;
default:
break;
}
return false;
}
});
在上面的代码中,如果我返回false,则Action_up没有被执行..如果我返回true,Action_cancel没有被执行..那就是传递值是那里的问题。
答案 0 :(得分:2)
我为此改变了一些东西。
不使用
awesomePager.requestDisallowInterceptTouchEvent(false)
,
只需使用return true
。
定义布尔滚动;
在 ViewPager.onPageScrolled 中设置 sroll = positionOffset!= 0.0 并覆盖 onTouchEvent , ViewPager 中的视图。
现在您可以检查 if(event.getAction()== MotionEvent.ACTION_UP&&!sroll)以确定是否会触发事件
答案 1 :(得分:1)
我遇到了同样的问题!对我来说,这非常有效....
case MotionEvent.ACTION_MOVE: {
getParent().requestDisallowInterceptTouchEvent(false);
break;
}
case MotionEvent.ACTION_CANCEL:{
getParent().requestDisallowInterceptTouchEvent(true);
break;
}
case MotionEvent.ACTION_UP:{
//delete awesomePager.requestDisallowInterceptTouchEvent(true);
//you don't need it here!
.
.
do your stuff....
.
}
将整个onTouch方法返回为true而不是false ...
return true;