requestLayout, invalidate和postInvalidate的异同

requestLayout

当一个VIEW的布局属性发生了变化的时候,可以调用该方法,让父VIEW调用onmeasure 和onlayout重新定位该view的位置,需要在UI线程调用

invalidate

强制使view重绘,需要在UI线程调用

postinvalidate

作用同上,但是可以直接在子线程调用

时间: 2024-11-05 18:43:39

requestLayout, invalidate和postInvalidate的异同的相关文章

通过查看源码,查看invalidate和postInvalidate的区别

查View的源码可知: postInvalidate是使用handler发送消息,即可以使用在非UI线程中,而invalidate直接修改布局,所以只能用在UI线程里了. public void invalidate() { invalidate(true); } void invalidate(boolean invalidateCache) { if (ViewDebug.TRACE_HIERARCHY) { ViewDebug.trace(this, ViewDebug.Hierarchy

【Android】android中Invalidate和postInvalidate的区别

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在

Android开发 View的UI刷新Invalidate和postInvalidate

Invalidate 正常刷新 /** * 使整个视图无效.如果视图可见, * {@link #onDraw(android.graphics.Canvas)} 调用此方法后将在后续的UI刷新里调用onDraw(android.graphics.Canvas)方法 * <p> * 必须从UI线程调用此方法.要从非UI线程调用,请调用{@link #postInvalidate()}.*/ public void invalidate() { invalidate(true); } /** *

Android View 深度分析requestLayout、invalidate与postInvalidate

requestLayout 当我们动态移动一个View的位置,或者View的大小.形状发生了变化的时候,我们可以在view中调用这个方法,即: 1 view.requestLayout(); 那么该方法的作用是什么呢? 从方法名字可以知道,“请求布局”,那就是说,如果调用了这个方法,那么对于一个子View来说,应该会重新进行布局流程.但是,真实情况略有不同,如果子View调用了这个方法,其实会从View树重新进行一次测量.布局.绘制这三个流程,最终就会显示子View的最终情况.那么,这个方法是怎

requestLayout invalidate postInvalidate

1.android中实现view的更新有几种方法? 你知道吗?其实android中实现view的更新有两种方法,一种是invalidate,另一种是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. 怎么说呢?Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. 鉴于此,如果要使用invalidate的刷新

Android requestLayout 和 invalidata , postInvalidate 比较

Android 中的View更新方法 invalidate 在UI线程中使用. postInvalidate 在非UI线程中通知重绘. View 确定自身已经不适合现有区域时,调用requestLayout(),通知父View重新测量和绘制此View的位置. 当View的LayoutParams发生改变时,也应该调用这个方法. requestLayout 详解 当调用requestLayout 时,会逐层向上进行传递,直到ViewRootImpl进行处理,如果子view调用了这个方法,会通知Vi

invalidate()和postInvalidate()的使用与区别

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型: Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. invalidate()是用来刷新View的,必须是在UI线程中进行工作.比如在修改某个view的显示时,调用invalidate()才能 看到重新绘制的界面.invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉. Android 程序默认情况下也只有一个进程,但

Android笔记:invalidate()和postInvalidate() 的区别及使用

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. invalidate()是用来刷新View的,必须是在UI线程中进行工作.比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面.invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉. 一个Android 程序默认情况下也只有一个进程,但

android中Invalidate和postInvalidate的差别

Android中实现view的更新有两组方法,一组是invalidate.还有一组是postInvalidate.当中前者是在UI线 程自身中使用,而后者在非UI线程中使用. Android提供了Invalidate方法实现界面刷新.可是Invalidate不能直接在线程中调用.由于他是违背了单 线程模型:Android UI操作并非线程安全的,而且这些操作必须在UI线程中调用. Android程序中能够使用的界面刷新方法有两种.各自是利用Handler和利用postInvalidate()来实