一、前言:
区别:
-
invalidate
用于进行View的刷新,在UI线程调用 -
postinvalidate
用于进行View的刷新,在非UI线程调用,将非UI线程切换到UI线程,最后也是调用invalidate。
二、解析
1、postInvalidate() 方法
对于线程中的刷新一个 View 为基类的界面,可以使用 postInvalidate() 方法在线程中来处理,其中还提供了一些重写方法比如 postInvalidate(int left,int top,int right,int bottom) 来刷新一个矩形区域,以及延时执行,比如postInvalidateDelayed(long delayMilliseconds) 或 postInvalidateDelayed(long delayMilliseconds,int left,int top,int right,int bottom) 方法,其中第一个参数为毫秒,如下:
void | postInvalidate () |
---|---|
void | postInvalidate (int left, int top, int right, int bottom) |
void | postInvalidateDelayed (long delayMilliseconds) |
void | postInvalidateDelayed (long delayMilliseconds, int left, int top, int right, int bottom) |
2、View.postDelayed()方法
在Android里,获取View宽高是个很长见得的话题了。众所周知,在Oncreate里直接调用View.getWidth或者View.getMeasuredWidth返回都是0。所以获取宽高时机很重要,对于这个问题的解决方法概括起来有四种方法。
view.post(new Runnable() {
@Override
public void run() {
int width=mTextView.getMeasuredWidth();//View宽度
int height=mTextView.getMeasuredHeight());//View高度
}
});
网友评论