gpt4 book ai didi

android - 与 removeAllViewsInLayout()、postInvalidate() 和 refreshDrawableState() 混淆

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:04 27 4
gpt4 key购买 nike

我真的很困惑这三个函数:removeAllViewsInLayout()postInvalidate()refreshDrawableState()

removeAllViewsInLayout()

当我在程序中使用 removeAllViewsInLayout() 时,所有 View 都消失了。但是当触发 postInvalidate() 刷新时,什么也没有。我认为 removeAllViewsInLayout() 删除了我所有的 View 。有没有办法清除我 View 中的所有内容但不删除它?

postInvalidate()

我想刷新一下我的观点。但是使用 refreshDrawableState(),我只能做一次,为什么?

最佳答案

如果您调用 postInvalidate()(或者在 UI 线程上调用 invalidate()),系统将安排重绘您的 View 。然后,您的 onDraw() 方法可以做任何它想做的事情,包括只绘制一个空白 Canvas 。

如果您调用 removeAllViewsInLayout(),它将执行此操作——删除每个 View ,包括您的自定义 View 。你可能不想那样做。 (编辑:removeAllViewsInLayout() 仅作为 ViewGroup 布局计算的一部分被调用。典型的用途是 ViewGroup “拥有”大量 View 但在 onLayout() 处理过程中决定只显示那些实际适合屏幕的子项。如果您不在计算 View 布局的过程中,您应该而是调用 removeAllViews()。)

调用 refreshDrawableState() 仅在您的 View 使用对 View 状态敏感的 Drawable 对象时才有用。例如,一个 Button 将使用它,以便在按下按钮时背景可绘制对象改变颜色。对于您正在做的事情,您也不必费心使用此方法。

关于android - 与 removeAllViewsInLayout()、postInvalidate() 和 refreshDrawableState() 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8251200/

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