View 没有绘制子view
时间: 2023-06-14 19:05:03 浏览: 79
如果 `View` 没有绘制子 `View`,可能是以下原因之一:
1. 没有调用 `onMeasure()`,`onLayout()` 和 `onDraw()` 方法。这些方法是 `View` 绘制子 `View` 的核心方法,必须正确实现。
2. 没有添加子 `View` 到 `ViewGroup` 中。在 `ViewGroup` 的 `onMeasure()` 方法中,需要遍历所有子 `View` 并测量它们的大小。如果没有添加子 `View`,就无法绘制它们。
3. 子 `View` 的大小为 0。如果子 `View` 的大小为 0,它将无法显示。请确保在测量子 `View` 的大小时,使用正确的测量规格。
4. 子 `View` 的可见性为 `GONE`。如果子 `View` 的可见性为 `GONE`,它将不会被绘制。请确保在调用 `setVisibility()` 方法时,使用正确的参数。
如果以上方法都没有解决问题,可以在 `onDraw()` 方法中绘制子 `View`。但这种方法不是最优解,因为它会增加绘制时间和内存占用。
相关问题
Android view绘制
Android的视图绘制是Android应用程序中的重要部分,它涉及到将用户界面元素绘制到屏幕上。以下是Android视图绘制的基本流程:
1. 触发绘制:当应用程序启动、布局发生变化或者手动调用 `invalidate()` 方法时,会触发视图绘制。
2. 测量布局:在绘制之前,Android会测量每个视图的大小。这个过程称为“测量布局”。测量布局是为了确定每个视图在屏幕上的位置和大小。
3. 布局:一旦测量完成,Android会根据视图的测量结果进行布局,确定每个视图在屏幕上的位置。
4. 绘制:布局完成后,Android会调用每个视图的 `draw()` 方法进行绘制。在 `draw()` 方法中,视图会绘制自己的内容,包括背景、文字、图片等。
5. 绘制层次:视图的绘制按照层次结构进行,即从父视图到子视图的顺序。父视图会先绘制自己,然后再绘制子视图。
6. 递归绘制:当父视图绘制完成后,它会递归地调用子视图的 `draw()` 方法,依次完成整个视图树的绘制过程。
7. 绘制缓存:为了提高绘制性能,Android使用了绘制缓存。绘制缓存可以将视图的绘制结果保存起来,在下次绘制时直接使用缓存,而不需要重新执行绘制操作。
总结来说,Android的视图绘制过程包括测量布局、布局、绘制和绘制缓存。通过这个过程,Android应用程序可以将用户界面元素绘制到屏幕上,实现丰富多样的交互效果。
QGraphicsView怎么绘制多边形
关于QGraphicsView绘制多边形,您可以创建一个QGraphicsPolygonItem对象,并将其添加到QGraphicsScene中。下面是示例代码:
```python
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsPolygonItem
from PyQt5.QtGui import QPolygonF, QBrush, QColor, QPen
# 创建QGraphicsView和QGraphicsScene对象
view = QGraphicsView()
scene = QGraphicsScene()
# 创建多边形点集合
points = QPolygonF([(-10, -10), (-10, 10), (10, 10), (10, -10)])
# 创建QGraphicsPolygonItem对象
polygon = QGraphicsPolygonItem(points)
# 设置多边形填充颜色和边框颜色
polygon.setBrush(QBrush(QColor(255, 255, 255)))
polygon.setPen(QPen(QColor(0, 0, 0), 2))
# 将多边形添加到场景中
scene.addItem(polygon)
# 将场景设置为QGraphicsView的场景
view.setScene(scene)
```
以上代码将在QGraphicsView中绘制一个正方形。您可以根据需要更改多边形点的坐标,从而绘制任何形状。