invalidate和requestLayout、postinvalidate方法使用说明

来源:互联网 发布:win8 mac地址修改器 编辑:程序博客网 时间:2024/06/08 07:04

invalidate

当View的显示内容发生改变,比如状态(enable,focus),背景,显隐发生改变等,且新显示内容不影响View的大小、位置,则只需调用invalidate方法。调用invalidate方法只会执行onDraw方法

需要在UI线程调用

postinvalidate

作用和invalidate一样

可以在子线程调用

requestLayout

当View的宽高已经不再适合现在的区域时,可以调用requestLayout方法要求parent view重新调用它的onMeasure onLayout来重新布局,并不会调用onDraw方法

若View宽高、位置发生改变而显示内容不变,则只需调用requestLayout方法

需要在UI线程调用

总结

View(非容器类)调用invalidate方法只会重绘自身,ViewGroup(容器类)调用则会重绘整个View树。

View(非容器类)调用requestLayout方法只会重新布局自己,ViewGroup(容器类)调用则会重新布局整个View树。

若View的大小、位置、内容都发生改变,则需调用requestLayout和invalidate。

其它

Invalidate(false)不擦除背景,直接在原基础上画,不会出现闪屏

Invalidate(true)擦除背景,再重新画,会出现闪屏(默认是true)

UpdateWindow()立即重绘,调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。

阅读全文
0 0
原创粉丝点击