我真的很困惑这三个函数:removeAllViewsInLayout(),postInvalidate()和refreshDrawableState().
removeAllViewsInLayout()
当我在程序中使用removeAllViewsInLayout()时,所有视图都消失了.但是当触发postInvalidate()来刷新时,什么都没有.我认为removeAllViewsInLayout()会删除我的所有视图.有没有办法清除我视图中的所有内容但不删除它?
postInvalidate()
我想刷新我的观点.但是使用refreshDrawableState(),我只能做一次,为什么?
解决方法
如果你调用postInvalidate()(或者只是在UI线程上调用invalidate()),系统将安排重绘你的视图.然后你的onDraw()方法可以做任何你想做的事情,包括只绘制一个空白画布.
如果您调用removeAllViewsInLayout(),它将执行此操作 – 删除每个视图,包括您的自定义视图.你可能不想这样做. (编辑:removeAllViewsInLayout()旨在仅作为ViewGroup的布局计算的一部分进行调用.典型的用法是“拥有”大量视图的ViewGroup,但在onLayout()处理期间决定只显示那些子节点这实际上适合屏幕.如果你不在计算视图布局的过程中,你应该调用removeAllViews()代替.)
调用refreshDrawableState()仅在视图使用对视图状态敏感的Drawable对象时才有用.例如,按钮将使用此按钮,以便在按下按钮时背景可绘制更改颜色.对于你正在做的事情,你也不需要打扰这个方法.