7

在我的项目中,使用 onTouchEvent 检测屏幕上的触摸并相应地执行操作,并使用 viewPager 进行滑动操作。问题在于滑动触摸动作正在执行。所以从这里找到解决方案解决了它。但是我的新问题是一旦 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 没有得到执行..那是按值传递是那里的问题。

4

2 回答 2

2

我为此改变了一些东西。

不使用 awesomePager.requestDisallowInterceptTouchEvent(false),只使用return true

活动中定义一个布尔滚动

ViewPager.onPageScrolled中设置sroll = positionOffset != 0.0 并覆盖onTouchEvent,其中ViewPager中的视图

现在你可以检查if (event.getAction()==MotionEvent.ACTION_UP && !sroll)来决定事件是否会触发

于 2012-07-05T16:49:19.710 回答
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 方法返回为真而不是假...

return true;
于 2014-10-01T11:50:00.677 回答