view

来源:互联网 发布:iphone怎么授权软件 编辑:程序博客网 时间:2024/04/29 17:45
invalidate()方法
说明:请求重绘View树,即draw()过程,假如视图大小没有变化就不会调用layout()过程,并且只绘制那些需要
“重新绘制的”视图,若是View,只绘制该View,ViewGroup,则绘制整个ViewGroup请求invalidate()方法,就
绘制该视图。
一般引起invalidate()操作的函数如下:
1.直接调用invalidate()方法,请求重新draw(),但只会绘制调用者本身
2.setSelection()方法,请求重新draw(),但只会绘制调用者本身。
3.setVisibility()方法,当View可视状态在INVISIBLE转换为VISIBLE时,会间接调用invalidate()方法,继而绘
制该View。
4.setEnable:请求重新draw(),但不会重新绘制任何视图包括该调用者本身。
requestLayout()方法:会导致调用measure()过程和layout()过程
说明:只是对View树重新布局layoutlayout过程包括measure()和layout(),不会调用draw()过程,不会重新绘制
任何视图包括该调用者本身。
requestFocus()函数说明:
说明:请求View树的draw()过程,但只绘制“需要重绘”的视图。

Android中实现View的更新有几种方法
Android中实现View的更新有两种方法,一种是invalidate,另一种是postInvalidate,其中前者是在UI线程自身
中使用,而后者在非UI线程中使用。
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在子线程中调用,因为它违背了单线程
模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。鉴于此,如果要使invalidate的
刷新,那我们就得配合handler的使用,使异步UI线程转到UI线程中调用,如果要在非UI线程中直接使用就调用
postInvalidate方法即可,这样就省去handler的烦恼。

requestLayout:
当View确定自身已经不再适合现有的区域时,该View本身调用这个方法要求parent view重新调用它的onMeasure
onLayout来重新设置自己的位置。特别是当View的layoutparameter发生改变,并且它的值还没能应用到view上
是时,这时候适合调用这个方法。





0 0
原创粉丝点击