Framelayout,与其他视图下的视图交互

时间:2012-05-02 13:35:31

标签: android android-layout

我在framelayout中有两个画布视图,一个在另一个上,就像堆栈一样。

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

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

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

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

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

我想我需要某种类型的dispatchTouchEvent()方法。目前它也没有用,或者我使用它错了。

2 个答案:

答案 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()
}