View 的postInvalidate如何使用?
时间: 2023-07-20 18:31:54 浏览: 49
postInvalidate() 是 View 类中的一个方法,用于在非 UI 线程中更新 View 的界面。它会在 UI 线程中异步地重新绘制 View。下面是 postInvalidate() 的使用方法:
1. 在非 UI 线程中调用 postInvalidate() 方法,例如:
```
new Thread(new Runnable() {
@Override
public void run() {
// 在非 UI 线程中更新 View 的数据
updateViewData();
// 在 UI 线程中重新绘制 View
postInvalidate();
}
}).start();
```
2. 重写 View 的 onDraw() 方法,在该方法中进行 View 的绘制操作,例如:
```
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 在该方法中进行 View 的绘制操作
drawView(canvas);
}
```
这样,在非 UI 线程中更新 View 的数据后,使用 postInvalidate() 方法通知 UI 线程重新绘制 View,就可以实现在非 UI 线程中更新 View 的界面。
相关问题
Cannot resolve symbol 'postInvalidate'
`postInvalidate()`是Android中的一个方法,用于在非UI线程中更新UI界面。它的作用是在当前控件所在的线程中异步地刷新View,而不是立即刷新。这个方法通常在自定义View中使用。
如果你遇到了"Cannot resolve symbol 'postInvalidate'"的错误,这可能是因为你使用的对象没有定义该方法。请确保你正在使用的对象是继承自View或其子类,并且该类中确实存在`postInvalidate()`方法。
如果你是在非UI线程中调用`postInvalidate()`,你可以尝试使用`View.post()`方法来代替,例如:
```java
view.post(new Runnable() {
@Override
public void run() {
view.invalidate();
}
});
```
postInvalidate 如何实现指定区域的重绘
如果只想重绘 View 的某个指定区域,可以使用 View 类中的 invalidate(Rect) 或 postInvalidate(Rect) 方法,其中 Rect 表示要重绘的区域。下面是 postInvalidate(Rect) 的使用方法:
1. 在非 UI 线程中调用 postInvalidate(Rect) 方法,例如:
```
new Thread(new Runnable() {
@Override
public void run() {
// 在非 UI 线程中更新 View 的数据
updateViewData();
// 在 UI 线程中重新绘制指定区域的 View
Rect rect = new Rect(0, 0, getWidth(), getHeight());
postInvalidate(rect);
}
}).start();
```
2. 重写 View 的 onDraw(Canvas) 方法,在该方法中进行 View 的绘制操作,例如:
```
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 在该方法中获取要重绘的区域
Rect rect = getInvalidatedRect();
// 在该方法中进行指定区域的 View 绘制操作
drawView(canvas, rect);
}
```
这样,在非 UI 线程中更新 View 的数据后,使用 postInvalidate(Rect) 方法通知 UI 线程重新绘制指定区域的 View,就可以实现只重绘指定区域的 View,提高绘制效率。