canvas 画各种图形1

preview
需积分: 0 0 下载量 61 浏览量 更新于2022-08-08 收藏 26KB DOCX 举报
【canvas 画各种图形1】 在 Android 开发中,`Canvas` 类是用于在屏幕上绘制图形的核心组件。它提供了一系列的绘图方法,允许开发者在指定的 `Bitmap` 或 `Surface` 上绘制点、线、弧、圆、椭圆、文字、矩形、多边形、曲线以及圆角矩形等基本图形。`Canvas` 是 Android 系统提供的一种图形绘制接口,而实际的像素数据存储在与其关联的 `Bitmap` 中。 1. **Canvas 类的基本概念** - `Canvas` 类:`Canvas` 提供了一系列的 `draw` 方法,用于在内存中的 `Bitmap` 或 `Surface` 上绘制图形。它是一个画布,开发者可以在这个画布上自由创作。 - `Bitmap`:用于存储像素数据,是实际的图像载体。`Canvas` 会将绘制的操作应用到 `Bitmap` 上。 - `Paint` 类:定义了图形的颜色、样式、字体等属性,是绘制时的样式描述器。 - `Path` 类:用于创建复杂图形路径,可以组合直线、曲线等元素。 2. **Canvas 常用的绘图方法** - `drawRect(RectF rect, Paint paint)`:绘制矩形,其中 `RectF` 定义了矩形的边界,`Paint` 决定了颜色和风格。 - `drawPath(Path path, Paint paint)`:绘制由 `Path` 对象定义的路径。 - `drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)`:在画布上贴图,`src` 是源图像区域,`dst` 是目标画布上的位置和大小。 - `drawLine(float startX, float startY, float stopX, float stopY, Paint paint)`:绘制一条直线。 - `drawPoint(float x, float y, Paint paint)`:绘制一个点。 - `drawText(String text, float x, float y, Paint paint)`:在指定位置绘制文本,支持设置字体、颜色等属性。 - `drawOval(RectF oval, Paint paint)`:根据 `RectF` 对象绘制椭圆。 - `drawCircle(float cx, float cy, float radius, Paint paint)`:在给定点绘制一个圆,`cx` 和 `cy` 是圆心坐标,`radius` 是半径。 - `drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)`:绘制弧形,`startAngle` 和 `sweepAngle` 分别表示弧的起始角度和扫过角度,`useCenter` 决定是否包含椭圆中心。 3. **Paint 类的作用** - `Paint` 类是图形的样式库,它包含颜色、抗锯齿、线条宽度、阴影效果、文字大小和字体等属性。在调用 `Canvas` 的绘图方法时,`Paint` 对象用来设置图形的外观。例如,可以通过修改 `Paint` 的颜色、风格、字体等属性来改变绘制的图形样式。 4. **使用场景** - 普通 `View` 的 `canvas` 适合简单的图形绘制和动画,如棋盘游戏。 - `SurfaceView` 的 `canvas` 适合高性能需求的图形渲染,如游戏和高质量动画,因为它允许在单独的线程中进行绘制,避免阻塞主线程。 5. **性能优化** - 当 `Bitmap` 的源区域和目标区域不同时,`drawBitmap` 方法可能会导致性能下降,因为需要进行缩放或拉伸操作。 - 为了保持良好的性能,应避免频繁的重绘操作,合理利用 `onDraw()` 方法的调用时机。 - 对于复杂的图形,可以考虑使用 `Path` 预先构建路径,减少绘制过程中的计算量。 Android 的 `Canvas` 提供了一个强大且灵活的图形绘制系统,结合 `Paint` 类,开发者可以创建出各种复杂的视觉效果和交互体验。理解并熟练掌握 `Canvas` 和 `Paint` 的使用是 Android UI 开发中必不可少的技能。