我有两个重叠的 ImageView,我正在调用 removeView() 来删除后面的那个。当我这样做时,我看到闪烁 - 被删除的视图被短暂地绘制在另一个视图的顶部,然后它消失了。
我曾尝试在删除之前调用 setVisibility(View.GONE) 和 setVisibility(View.INVISIBLE),但都没有帮助。
我怎样才能避免这种情况?
我和你遇到了同样的问题。最后我删除了removeView()
并使用了 setVisibility(View.GONE)
. 这避免了闪烁。但我不确定是否setVisibility(View.GONE)
equals removeView()
。附上文档:
setVisibility(View.GONE):这个视图是不可见的,它不占用任何空间用于布局目的
我找到了这个简单的解决方法,它首先将视图隐藏,然后在延迟后将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
使用addView
or updateView
。