Android(安卓)Canvas 绘图
画布(Canvas)是图形编程中一个很普通的概念,通常由三个基本的绘图组件组成:
Canvas提供了绘图方法,可以向底层的位图绘制基本图形。
Paint也称为"刷子",Paint可以指定如何将基本图形绘制到位图上。
Bitmap绘图的表面。
Android绘图API支持透明度、渐变填充、圆边矩形和抗锯齿。遗憾的是,由于资源限制,它还不支持矢量图形,它使用的是传统栅格样式的重新绘图。
这种栅格方法的结果是提高了效率,但是改变一个Paint对象不会影响已经画好的基本图形,它只会影响新的元素。
Canvas类封装了用作绘图表面的位图;它还提供了draw*方法来实现设计。
下面的列表提供了对可用的基本图形的简要说明,但并没有深入地探讨每一个draw方法的详细内容:
drawARGB / drawRGB / drawColor使用单一的颜色填充画布。
drawArc在一个矩形区域的两个角之间绘制一个弧。
drawBitmap在画布上绘制一个位图。可以通过指定目标大小或者使用一个矩阵来改变目标位图的外观。
drawBitmapMesh使用一个mesh(网)来绘制一个位图,它可以通过移动网中的点来操作目标的外观。
drawCircle以给定的点为圆心,绘制一个指定半径的圆。
drawLine(s)在两个点之间画一条(多条)直线。
drawOval以指定的矩形为边界,画一个椭圆。
drawPaint使用指定的Paint填充整个Canvas
drawPath绘制指定的Path。Path对象经常用来保存一个对象中基本图形的集合。
drawPicture在指定的矩形中绘制一个Picture对象。
drawPosText绘制指定了每一个字符的偏移量的文本字符串。
drawRect绘制一个矩形。
drawRoundRect绘制一个圆角矩形。
drawText在Canvas上绘制一个文本串。文本的字体、大小和渲染属性都设置在用来渲染文本的Paint对象中。
drawTextOnPath在一个指定的path上绘制文本。
drawVertices绘制一系列三角形面片,通过一系列顶点来指定它们。
这些绘图方法中的每一个都需要指定一个Paint对象来渲染它。在下面的部分中,将学习如何创建和修改Paint对象,从而在绘图中完成大部分工作。
设置Paint
Paint类相当于一个笔刷和调色板。它可以选择如何使用上面描述的draw方法来渲染绘制在画布上的基本图形。通过修改Paint对象,可以在绘图的时候控制颜色、样式、字体和特殊效果。最简单地,setColor可以让你选择一个Paint的颜色,而Paint对象的样式(使用setStyle控制)则可以决定是绘制绘图对象的轮廓(STROKE),还是只填充每一部分(FILL),或者是两者都做(STROKE_AND_FILL),除了这些简单的控制之外,Paint类还支持透明度,另外,它也可以通过使用各种各样的阴影、过滤器和效果进行修改,从而提供由更丰富的、复杂的画笔和颜料组成的调色板。
android sdk包含了一些非常好的实例,它们说明了Paint类中可用的大部分功能。你可以在API demos的graphics子目录中找到它们:
sdk root folder]\samples\ApiDemos\src\com\android\samples\graphics
在下面的部分中,将学习和使用其中的部分功能。这些部分只是简单地罗列了它们能实现的效果(例如渐变和边缘浮雕),而没有详细地列出所有可能的情况。
使用透明度
Android中的所有颜色都包含了一个不透明组件(alpha通道)。
当创建一个颜色的时候,可以使用argb或者parseColor方法来定义它的alpha值,如下所示:
// 使用红色,并让它50%透明 int opacity = 127; int intColor = Color.argb(opacity, 255, 0, 0); int parsedColor = Color.parseColor("#7FFF0000");
// 让颜色50%透明 int opacity = 127; myPaint.setAlpha(opacity);
创建一个不是100%透明的颜色意味着,使用它绘制的任何基本图形都将是部分透明的--也就是说,在它下面绘制的所有基本图形都是部分可见的。
可以在任何使用了颜色的类或者方法中使用透明效果,包括Paint、Shader和Mask Filter。
Shader介绍
Shader类的派生类可以创建允许使用多种固体颜色填充绘图对象的Paint。
对Shader最常见的使用是定义渐变填充;渐变是在2D图像中添加深度和纹理的最佳方式之一。Android包含了一个Bitmap Shader和一个Compose Shader,同时,还包含了三个渐变的Shader。
试图用语言来描述绘图的效果本来就是没有意义的,所以看一下图就应该可以知道每一种Shader是如何工作的。图中从左到右依次代表的是LinearGradient、RadialGradient和 SweepGradient.
更多相关文章
- Android调用系统分享功能总结
- Android中SurfaceView简单使用
- View、Window、WindowManager-vsync信号
- 常用控件及其属性(Button)
- Android(安卓)游戏开发 SurfaceView框架
- 面试记录
- android开发之四种基本布局和自定义控件
- Android(安卓)View (4) View的绘制过程
- 解决打开Android(安卓)SDK Manager时出现“.....\sdk\tools\l