invalidate和requestLayout、postinvalidate方法使用说明

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被直接发送到目标窗口,从而导致窗口立即重绘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值