android - 使用 ViewPager 和 PassByValue 滑动页面时执行 onTouchEvent

标签 android android-viewpager touch-event pass-by-value

在我的项目中,使用 onTouchEvent 检测屏幕上的触摸并相应地执行操作,并使用 viewPager 进行滑动操作。问题是滑动触摸 Action 正在执行。所以从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 没有被执行。这就是按值传递的问题。

最佳答案

我为此改变了一些东西。

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

activity中定义一个boolean sroll;

ViewPager.onPageScrolled中设置sroll = positionOffset != 0.0 我覆盖 onTouchEvent,其中 ViewPager 中的 view

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

关于android - 使用 ViewPager 和 PassByValue 滑动页面时执行 onTouchEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10828436/

相关文章:

android - JSONException : java. lang.Integer 无法转换为 JSONObject`

android - Beta 版到生产版

Android:在 ViewPager 中更改文本

android - ViewPager 和 fragment ——存储 fragment 状态的正确方法是什么?

javascript - 如何聚合onMouse和onTouch,使canvas可以在鼠标和ipad上使用?

ios - UITableview 的触摸事件

android - MD5 生成速度慢且缺少第一个字符

java - 在 Java 中按值对数组元素进行分组(2 × 2、3 × 3 等)

android - ASyncTask、隐藏 fragment 、保留实例和屏幕方向变化

javascript - html页面中的触摸事件和鼠标事件