Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 将触摸事件从一个组件传递到ListView_Android - Fatal编程技术网

Android 将触摸事件从一个组件传递到ListView

Android 将触摸事件从一个组件传递到ListView,android,Android,我有一个简单的按钮,它有一个触摸式听筒。一旦在ACTION_DOWN ACTION上触发它,一个ListView就会出现在该按钮的顶部,这样ListView就在用户的手指下。 我想要的是将触摸事件从按钮传递到ListView,这样当向上/向下移动时,列表视图也会向上/向下滚动 简言之: 用户触摸按钮 一个列表视图出现在覆盖该按钮的面板上 在不松开手指的情况下,用户开始将手指移动到屏幕的上/下边缘 列表视图将滚动 更新 我尝试创建一个覆盖onInterceptTouchEvent的自定义ListV

我有一个简单的按钮,它有一个触摸式听筒。一旦在ACTION_DOWN ACTION上触发它,一个ListView就会出现在该按钮的顶部,这样ListView就在用户的手指下。 我想要的是将触摸事件从按钮传递到ListView,这样当向上/向下移动时,列表视图也会向上/向下滚动

简言之:

用户触摸按钮

一个列表视图出现在覆盖该按钮的面板上

在不松开手指的情况下,用户开始将手指移动到屏幕的上/下边缘

列表视图将滚动

更新


我尝试创建一个覆盖onInterceptTouchEvent的自定义ListView组件,但我不清楚该方法应该包含什么?

您应该创建一个扩展ListView的自定义类,然后覆盖onInterceptTouchEventMotionEvent e的方法。只要触摸列表中的视图,就会调用该方法。

您不需要任何自定义组件

在TouchListener上设置按钮,如下所示:

并将listView onTouchListener设置为:


这正是我试图做的,但我不清楚InterceptTouchEvent和onTouchEvent方法中应该包含什么?
button.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) 
    {
        switch (motionEvent.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                // popup the listView
                break;

            case MotionEvent.ACTION_MOVE:
                // lstPopup is your ListView
                lstPopup.dispatchTouchEvent(motionEvent);
                break;

            case MotionEvent.ACTION_UP:
                // do other stuff
        }

        return false;
    }
});
lstPopup.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {

        if (motionEvent.getAction() == MotionEvent.ACTION_MOVE)
        {
            lstPopup.setSelectionFromTop(0, (int) motionEvent.getY());
        }

        return false;
    }
});