使用ViewPager和PassByValue刷新页面时,onTouchEvent正在执行

时间:2012-05-31 06:22:09

标签: android android-viewpager ontouchevent pass-by-value

在我的项目中使用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没有被执行..那就是传递值是那里的问题。

2 个答案:

答案 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;