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