2

我有两个重叠的 ImageView,我正在调用 removeView() 来删除后面的那个。当我这样做时,我看到闪烁 - 被删除的视图被短暂地绘制在另一个视图的顶部,然后它消失了。

我曾尝试在删除之前调用 setVisibility(View.GONE) 和 setVisibility(View.INVISIBLE),但都没有帮助。

我怎样才能避免这种情况?

4

2 回答 2

0

我和你遇到了同样的问题。最后我删除了removeView()并使用了 setVisibility(View.GONE). 这避免了闪烁。但我不确定是否setVisibility(View.GONE)equals removeView()。附上文档:

setVisibility(View.GONE):这个视图是不可见的,它不占用任何空间用于布局目的

于 2013-07-29T04:36:00.293 回答
0

我找到了这个简单的解决方法,它首先将视图隐藏,然后在延迟后将View.Gone其完全删除以节省内存。

v.visibility = View.GONE
val handler =  Handler(Looper.getMainLooper())
handler.postDelayed({
    if(v.parent != null)
        wm.removeView(v)
    }, 300)

如果你每次都创建一个新的 View 对象,这个方法是可以的;但是如果您稍后要再次添加先前创建的视图(相同的引用),那么您需要小心,因为该视图可能尚未被删除(addView如果是这种情况,调用将给出错误)。也许你可以先停止处理程序(通过使处理程序全局并调用handler.removeCallbacksAndMessages(null))然后检查v.parent != null使用addViewor updateView

于 2022-01-15T10:45:44.637 回答