Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将滚动事件传递到另一个视图,但保持点击/单击事件并对其作出反应_Android - Fatal编程技术网

Android 如何将滚动事件传递到另一个视图,但保持点击/单击事件并对其作出反应

Android 如何将滚动事件传递到另一个视图,但保持点击/单击事件并对其作出反应,android,Android,我有一个水平滚动视图,我想将其拖动/滚动事件传递给另一个视图(或手势侦听器),但我希望它能够对其子视图上的单击/点击事件做出反应。我该怎么做 我看这个, 但我需要的正是他们在onScroll方法中保留的开放式代码-如何将滚动传递到另一个视图?我建议以下解决方案: 1/查找ViewPager的公共父视图和要将事件传递给的视图 2/创建扩展父视图的customView 3/使用此命令覆盖dispatchTouchEvent public boolean dispatchTouchEvent(Moti

我有一个
水平滚动视图
,我想将其拖动/滚动事件传递给另一个视图(或手势侦听器),但我希望它能够对其子视图上的单击/点击事件做出反应。我该怎么做

我看这个,


但我需要的正是他们在
onScroll
方法中保留的开放式代码-如何将滚动传递到另一个视图?

我建议以下解决方案:

1/查找ViewPager的公共父视图和要将事件传递给的视图

2/创建扩展父视图的customView

3/使用此命令覆盖dispatchTouchEvent

public boolean dispatchTouchEvent(MotionEvent ev){
    if (mDetector.onTouchEvent(ev)){
        // This is a scroll event -> Pass to the targetView;
        return findViewById(R.id.targetView).dispatchTouchEvent(ev);
    }
    // this is not a scroll event. dispatch normally
    super.dispatchTouchEvent(ev);
}
p/S:if do viewpager.setOnTouchListener()。只有当viewPager的页面(通常是片段)对触摸事件不感兴趣时,才会调用侦听器。
例如,您的ViewPager包含一个具有ListView(recyclerView)的片段,那么您的Listener不会因为垂直滚动事件而被调用,但ListView会。因此,根据页面的视图,您可能会错过事件。

对于
水平滚动视图
执行以下操作:

private float xCoordinateOfScreenTouch;
private float xCoordinateOfDragRelease;
private static final int MIN_DISTANCE = 40;

horizontalScrollView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    xCoordinateOfScreenTouch = event.getX();
                    break;
                case MotionEvent.ACTION_UP:
                    xCoordinateOfDragRelease = event.getX();
                    float deltaX = xCoordinateOfDragRelease - xCoordinateOfScreenTouch;

                    if (Math.abs(deltaX) > MIN_DISTANCE) {

                        if (xCoordinateOfDragRelease > xCoordinateOfScreenTouch) {
                            // left to right
                            // do whatever (pass the event)
                        } else {
                            // right to left
                            // do whatever (pass the event)
                        }
                    }
                    break;
            }
            return true;
        }
    });
对于默认情况下将
ACTION\u DOWN
事件传递给的孩子,请执行以下操作:

    textView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                xCoordinateOfScreenTouch = event.getRawX();
            }
            return false;
        }
    });

它是一个
水平滚动视图
,而不是一个浏览页面-这会改变什么吗?我今天会试试你的建议,让你知道发生了什么,它不会影响任何事情。是的,等待结果:D