gpt4 book ai didi

android - 你如何防止 Android View 绘制它的背景

转载 作者:搜寻专家 更新时间:2023-11-01 08:02:26 25 4
gpt4 key购买 nike

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

本来以为重写onDraw()会很简单,类似下面...

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

这适用于大部分 View ,但我发现无论我的条件检查结果如何,背景仍会显示。看完docs有点我发现了这个...

"Drawing is handled by walking the tree and rendering each view that intersects the invalid region. Because the tree is traversed in-order, this means that parents will draw before (i.e., behind) their children, with siblings drawn in the order they appear in the tree. If you set a background drawable for a View, then the View will draw it for you before calling back to its onDraw() method."

我想出的解决方案有点乱......

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

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

最佳答案

背景是在 draw() 方法期间绘制的,而不是 onDraw() 方法。你可以覆盖它,但它所做的不仅仅是绘制背景,所以这不是一个真正的选择。

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

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

关于android - 你如何防止 Android View 绘制它的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19165339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com