postInvalidate 如何实现指定区域的重绘
时间: 2024-03-09 18:49:51 浏览: 8
如果只想重绘 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,提高绘制效率。