2

我在框架布局中有 2 个画布视图,一个接一个,就像堆栈一样。

<Framelayout>
      <Canvas />    // Canvas underneath
      <Canvas />    // Canvas available to user for interaction.
</Framelayout>

两个帆布占据整个区域,下方的帆布完全被帆布鞋面覆盖。两个画布都是透明的,因此用户可以看到两个画布(如果它们有任何内容)。

我让用户使用触摸交互在上部画布上绘图。

如何禁用上部画布的触摸侦听器,以便用户现在可以在下面的画布上绘制,但上部画布仍然可见。Upper Canvas 只是不与用户的触摸输入进行交互。相反,下部画布正在交互。

我正在使用按钮而不是画布进行测试,只有上部按钮响应点击事件。通过扩展,画布视图也是如此。

我想我需要某种类似 dispatchTouchEvent() 的方法。目前它也不起作用,或者我用错了。

4

2 回答 2

2

只需将触摸事件传递给底层画布。

例如:

canvas.setOnTouchListner(new View.OnTouchListener(){

onTouch(View view, MotionEvent event) 
    {       
        canvasUnder.onTouch(event);
    }
});
于 2012-05-02T13:44:08.257 回答
2

触摸事件沿视图树向下级联,直到触摸侦听器返回true

由于一个画布始终位于另一个画布的“下方”,因此将顶层画布作为底层画布的子级是有意义的。这意味着底层必须是某种自定义 ViewGroup。

无论哪种方式,当您不希望顶级画布处理触摸事件时,只需对顶级画布执行以下操作:

@Override
public void onTouch(View view, MotionEvent event) {
   if(touchHandled())
      return true;
   else
      return false;
}

然后在底部画布做一些事情:

@Override
public void onTouch(View view, MotionEvent event) {
   handleBottomLevelTouchEvent()
}
于 2012-05-02T13:51:29.567 回答