Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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 如何忽略触摸事件,并让下面的ImageView将其作为缩放手势处理(如果适用)?_Android - Fatal编程技术网

Android 如何忽略触摸事件,并让下面的ImageView将其作为缩放手势处理(如果适用)?

Android 如何忽略触摸事件,并让下面的ImageView将其作为缩放手势处理(如果适用)?,android,Android,我有一个支持缩放的自定义ImageView控件(TouchImageView)。在这个视图的顶部有一个seekbar。我希望seekbar仅在用户单击或拖动seekbar的拇指时工作。如果用户单击的是seekbar,而不是拇指,则下面的ImageView应该会收到触摸事件或手势 这是我的密码。我设法用dispatchTouchEvent将触摸事件发送到ImageView,但ImageView只接收触摸事件。我需要它来接收缩放手势(当然,只有当用户做出缩放手势时才需要它。如果用户只进行触摸事件,那

我有一个支持缩放的自定义ImageView控件(TouchImageView)。在这个视图的顶部有一个seekbar。我希望seekbar仅在用户单击或拖动seekbar的拇指时工作。如果用户单击的是seekbar,而不是拇指,则下面的ImageView应该会收到触摸事件或手势

这是我的密码。我设法用dispatchTouchEvent将触摸事件发送到ImageView,但ImageView只接收触摸事件。我需要它来接收缩放手势(当然,只有当用户做出缩放手势时才需要它。如果用户只进行触摸事件,那么ImageView应该只接收触摸事件)

seekbarHorizontal.setOnTouchListener(新的OnTouchListener()){
@凌驾
公共布尔onTouch(视图arg0、运动事件arg1){
float x=arg1.getX();
float thumbOffset=seekbarHorizontal.getThumbOffset();
if(arg1.getAction()==MotionEvent.ACTION\u向下)
{
如果(xseekbarHorizontal.getProgress()+thumbOffset)
{
sendSeekbarHorizontalTouchEventTo=“image”;
imgRight.dispatchTouchEvent(arg1);
返回true;
}
其他的
{
sendSeekbarHorizontalTouchEventTo=“seekbar”;
返回false;
}
}
其他的
{
if(sendSeekbarHorizontalTouchEventTo.equals(“图像”))
{
imgRight.dispatchTouchEvent(arg1);
返回true;
}
其他的
{
返回false;
}
}
}
});

我想seekbar包含一个滑块?FrameLayout不应该将其绘制在其他元素之上,并在开箱即用的情况下处理它吗?我想你应该用a来代替though@G_V:是,seekbar和图像位于框架布局中。但我如何处理它的开箱即用?手势事件如何到达ImageView而不被seekbar捕获(因为seekbar位于顶部)?我假设您有一个包含这两个事件的活动。在活动上实现侦听器,并将其传递给seekbar。该活动可以访问ImageView,并且应该能够对其进行操作。基本上,您可以手动将事件传递给要响应的方法。
    seekbarHorizontal.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {

            float x = arg1.getX();
            float thumbOffset = seekbarHorizontal.getThumbOffset();

            if(arg1.getAction() == MotionEvent.ACTION_DOWN)
            {
                if(x < seekbarHorizontal.getProgress() - thumbOffset || x > seekbarHorizontal.getProgress() + thumbOffset)
                {
                    sendSeekbarHorizontalTouchEventTo = "image";
                    imgRight.dispatchTouchEvent(arg1);
                    return true;
                }
                else
                {
                    sendSeekbarHorizontalTouchEventTo = "seekbar";
                    return false;
                }
            }
            else
            {
                if(sendSeekbarHorizontalTouchEventTo.equals("image"))
                {
                    imgRight.dispatchTouchEvent(arg1);
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
    });