android中view的绘制流程及performtraversal
时间: 2023-04-24 21:03:55 浏览: 214
Android中View的绘制流程是指从View的根节点开始,递归遍历所有子节点,对每个节点进行测量、布局和绘制的过程。具体流程如下:
1.测量(Measure):在View的onMeasure()方法中进行,测量View的宽高以及子View的宽高。
2.布局(Layout):在View的onLayout()方法中进行,确定View的位置和大小。
3.绘制(Draw):在View的onDraw()方法中进行,将View绘制到屏幕上。
4.遍历(Traversal):在View的performTraversal()方法中进行,遍历View树,对每个节点进行测量、布局和绘制。
performTraversal()方法是View的内部方法,用于遍历View树。它会先调用View的onMeasure()方法,然后调用View的onLayout()方法,最后调用View的onDraw()方法,完成View的绘制过程。在遍历过程中,如果发现View的尺寸或位置发生了变化,会重新进行测量、布局和绘制。
相关问题
Android 监听View绘制完毕
要监听 Android 中的 View 绘制完毕事件,可以使用 `ViewTreeObserver` 的 `addOnGlobalLayoutListener()` 方法。以下是一个示例:
```java
// 获取要监听的 View 对象
View view = findViewById(R.id.your_view_id);
// 获取 View 的 ViewTreeObserver
final ViewTreeObserver observer = view.getViewTreeObserver();
// 添加绘制完毕监听器
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// 在绘制完毕后执行相应的操作
// 移除监听器,避免重复触发
observer.removeOnGlobalLayoutListener(this);
}
});
```
在上述代码中,`R.id.your_view_id` 是要监听的 View 的 ID,您需要将其替换为实际的 View ID。
通过 `getViewTreeObserver()` 方法可以获取 View 的 `ViewTreeObserver` 对象。然后,使用 `addOnGlobalLayoutListener()` 方法添加一个 `OnGlobalLayoutListener` 监听器。在监听器的 `onGlobalLayout()` 方法中,可以执行在 View 绘制完毕后需要进行的操作。
在 `onGlobalLayout()` 方法中,建议将监听器从 ViewTreeObserver 中移除,以避免重复触发。可以使用 `removeOnGlobalLayoutListener(this)` 方法进行移除。
这样就可以监听并在 View 绘制完毕后执行相应的操作了。
Android view绘制
Android的视图绘制是Android应用程序中的重要部分,它涉及到将用户界面元素绘制到屏幕上。以下是Android视图绘制的基本流程:
1. 触发绘制:当应用程序启动、布局发生变化或者手动调用 `invalidate()` 方法时,会触发视图绘制。
2. 测量布局:在绘制之前,Android会测量每个视图的大小。这个过程称为“测量布局”。测量布局是为了确定每个视图在屏幕上的位置和大小。
3. 布局:一旦测量完成,Android会根据视图的测量结果进行布局,确定每个视图在屏幕上的位置。
4. 绘制:布局完成后,Android会调用每个视图的 `draw()` 方法进行绘制。在 `draw()` 方法中,视图会绘制自己的内容,包括背景、文字、图片等。
5. 绘制层次:视图的绘制按照层次结构进行,即从父视图到子视图的顺序。父视图会先绘制自己,然后再绘制子视图。
6. 递归绘制:当父视图绘制完成后,它会递归地调用子视图的 `draw()` 方法,依次完成整个视图树的绘制过程。
7. 绘制缓存:为了提高绘制性能,Android使用了绘制缓存。绘制缓存可以将视图的绘制结果保存起来,在下次绘制时直接使用缓存,而不需要重新执行绘制操作。
总结来说,Android的视图绘制过程包括测量布局、布局、绘制和绘制缓存。通过这个过程,Android应用程序可以将用户界面元素绘制到屏幕上,实现丰富多样的交互效果。