我在framelayout中有两个画布视图,一个在另一个上,就像堆栈一样。
<Framelayout>
<Canvas /> // Canvas underneath
<Canvas /> // Canvas available to user for interaction.
</Framelayout>
两个画布占据整个区域,下方的画布完全被画布鞋面覆盖。 两个画布都是透明的,因此用户可以看到画布(如果它们有任何内容)。
我让用户使用触摸交互在上部画布上绘图。
如何禁用上部画布的触摸侦听器,以便用户现在可以在下面的画布上绘制,但上部画布仍然可见。 Upper Canvas只是不与用户的触摸输入交互。相反,较低的画布正在相互作用。
我用按钮测试它,而不是画布,只有上按钮响应点击事件。通过扩展,画布视图也是如此。
我想我需要某种类型的dispatchTouchEvent()方法。目前它也没有用,或者我使用它错了。
答案 0 :(得分:2)
只需将触摸事件传递给底层画布。
例如:
canvas.setOnTouchListner(new View.OnTouchListener(){
onTouch(View view, MotionEvent event)
{
canvasUnder.onTouch(event);
}
});
答案 1 :(得分: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()
}