如何防止Android视图绘制其背景

时间:2013-10-03 17:22:09

标签: android view

在Android中我有一个扩展View的类。在某些情况下,我希望它不会吸引自己。我意识到我可以将ViewVisibility()设置为View.INVISIBLE或View.GONE,但如果可能的话我宁愿避免这种情况。如果此自定义视图可见或不可见,则代码的其他部分的行为会有所不同,如果不需要,我不想重写这些部分。

最初我认为它会像重写onDraw()一样简单,类似于以下内容......

@Override
protected void onDraw(Canvas canvas) {
   if(...){ //check some member variables
      return;
   } else {
      //draw code
   }
}

这适用于大部分视图,但我发现无论条件检查的结果如何,背景仍会显示。在阅读了docs之后我发现了这个......

  

“绘图是通过遍历树并渲染与无效区域相交的每个视图来处理的。因为树是按顺序遍历的,这意味着父母将在他们的孩子之前(即后面)绘制,同时绘制兄弟姐妹。它们出现在树中。如果为View设置了一个可绘制的背景,那么View会在回调它的onDraw()方法之前为你绘制它。“

我提出的解决方案有点像黑客......

@Override
protected void onDraw(Canvas canvas) {
   if(...){ //check some member variables
      //set background to transparent
      return;
   } else {
      //restore default background
      //draw code
   }
}

所以我想我的问题就变成了:有没有办法覆盖视图的默认背景绘制行为,这样我就不必更改视图的可见性或背景了?

1 个答案:

答案 0 :(得分:4)

draw()方法中绘制背景,而不是onDraw()方法。你可以覆盖它,但它比仅仅绘制背景还要多得多,所以这不是一个真正的选择。

根据上面的评论,您最好的选择是以编程方式更改背景。

编辑:是的,在调用draw()之前,您可以覆盖super.draw()并覆盖背景。