繁体   English   中英

片段上ViewPager中的Android GestureDetector

[英]Android GestureDetector within a ViewPager on a Fragment

我正在尝试创建一个手势检测器,当用户向左或向右滑动时,它将触发。 我正在使用ViewPager,并已通过向左和向右滑动代码来禁用了在视图之间分页的功能:

    mViewPager.setOnTouchListener(new View.OnTouchListener() {

        public boolean onTouch(View arg0, MotionEvent arg1) {
            return true;
        }
    });

我正在尝试使用以下方法在片段中创建一个OnTouchListener:

    View v = inflater.inflate(R.layout.fragment_myview, null, false);
    final GestureDetector gesture = new GestureDetector(getActivity(),
            new GestureDetector.SimpleOnGestureListener() {

                @Override
                public boolean onDown(MotionEvent e) {
                    return true;
                }

                @Override
                public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                                       float velocityY) {
                    Log.i("fling", "onFling has been called!");
                    final int SWIPE_MIN_DISTANCE = 120;
                    try {
                        if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE) {
                            Log.i("fling", "Right to Left");
                        } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE) {
                            Log.i("fling", "Left to Right");
                        }
                    } catch (Exception e) {
                        // nothing
                    }
                    return super.onFling(e1, e2, velocityX, velocityY);
                }
            });

    v.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return gesture.onTouchEvent(event);
        }
    });

这里显示的LogCat没有被解雇,我不确定为什么。 有没有人有什么建议? 提前致谢。

如下更改代码,然后尝试:

mViewPager.setOnTouchListener(new View.OnTouchListener() {

    public boolean onTouch(View arg0, MotionEvent arg1) {
        return false;
    }
});

如果在onTouch函数中返回true,则表示视图寻呼机已消耗touch事件。 因此touch事件不会被调用到父视图,在您的情况下是其片段视图。 因此,返回false。 这应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM