Android学习绘制图形

Android的绘图继承于View组件,重写onDraw(Canvas canvas) 方法时涉及一个绘图API: Canvas 代表了依附于指定View的画布,并且提供了很多绘制方法。

Canvas提供的方法还涉及一个API: Paint ,Paint代表了Canvas上的画笔,主要用于设置绘制风格,画笔颜色,粗细,填充风格等。

Path代表任意多条直线连接而成的任意图形,当Canvas根据Path绘制图形时,它可以绘制出任意形状的图形。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.LinearGradient;

import android.graphics.Paint;

import android.graphics.Path;

import android.graphics.RectF;

import android.graphics.Shader;

import android.util.AttributeSet;

import android.view.View;

public class MyView extends View {

    public MyView(Context context, AttributeSet set) {

        super(context, set);

    }

    @Override

    // 重写该方法,进行绘图

    protected void onDraw(Canvas canvas) {

        super.onDraw(canvas);

        // 把整张画布绘制成白色

        canvas.drawColor(Color.WHITE);

        Paint paint = new Paint();

        // 去锯齿

        paint.setAntiAlias(true);

        paint.setColor(Color.BLUE);

        paint.setStyle(Paint.Style.STROKE);

        paint.setStrokeWidth(3);

        // 绘制圆形

        canvas.drawCircle(40, 40, 30, paint);

        // 绘制正方形

        canvas.drawRect(10, 80, 70, 140, paint);

        // 绘制矩形

        canvas.drawRect(10, 150, 70, 190, paint);

        RectF re1 = new RectF(10, 200, 70, 230);

        // 绘制圆角矩形

        canvas.drawRoundRect(re1, 15, 15, paint);

        RectF re11 = new RectF(10, 240, 70, 270);

        // 绘制椭圆

        canvas.drawOval(re11, paint);

        // 定义一个Path对象,封闭成一个三角形。

        Path path1 = new Path();

        path1.moveTo(10, 340);

        path1.lineTo(70, 340);

        path1.lineTo(40, 290);

        path1.close();

        // 根据Path进行绘制,绘制三角形

        canvas.drawPath(path1, paint);

        // 定义一个Path对象,封闭成一个五角形。

        Path path2 = new Path();

        path2.moveTo(26, 360);

        path2.lineTo(54, 360);

        path2.lineTo(70, 392);

        path2.lineTo(40, 420);

        path2.lineTo(10, 392);

        path2.close();

        // 根据Path进行绘制,绘制五角形

        canvas.drawPath(path2, paint);

        // ----------设置填充风格后绘制----------

        paint.setStyle(Paint.Style.FILL);

        paint.setColor(Color.RED);

        canvas.drawCircle(120, 40, 30, paint);

        // 绘制正方形

        canvas.drawRect(90, 80, 150, 140, paint);

        // 绘制矩形

        canvas.drawRect(90, 150, 150, 190, paint);

        RectF re2 = new RectF(90, 200, 150, 230);

        // 绘制圆角矩形

        canvas.drawRoundRect(re2, 15, 15, paint);

        RectF re21 = new RectF(90, 240, 150, 270);

        // 绘制椭圆

        canvas.drawOval(re21, paint);

        Path path3 = new Path();

        path3.moveTo(90, 340);

        path3.lineTo(150, 340);

        path3.lineTo(120, 290);

        path3.close();

        // 绘制三角形

        canvas.drawPath(path3, paint);

        Path path4 = new Path();

        path4.moveTo(106, 360);

        path4.lineTo(134, 360);

        path4.lineTo(150, 392);

        path4.lineTo(120, 420);

        path4.lineTo(90, 392);

        path4.close();

        // 绘制五角形

        canvas.drawPath(path4, paint);

        // ----------设置渐变器后绘制----------

        // 为Paint设置渐变器

        Shader mShader = new LinearGradient(0, 0, 40, 60, new int[] {

                Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW }, null,

                Shader.TileMode.REPEAT);

        paint.setShader(mShader);

        // 设置阴影

        paint.setShadowLayer(45, 10, 10, Color.GRAY);

        // 绘制圆形

        canvas.drawCircle(200, 40, 30, paint);

        // 绘制正方形

        canvas.drawRect(170, 80, 230, 140, paint);

        // 绘制矩形

        canvas.drawRect(170, 150, 230, 190, paint);

        RectF re3 = new RectF(170, 200, 230, 230);

        // 绘制圆角矩形

        canvas.drawRoundRect(re3, 15, 15, paint);

        RectF re31 = new RectF(170, 240, 230, 270);

        // 绘制椭圆

        canvas.drawOval(re31, paint);

        Path path5 = new Path();

        path5.moveTo(170, 340);

        path5.lineTo(230, 340);

        path5.lineTo(200, 290);

        path5.close();

        // 根据Path进行绘制,绘制三角形

        canvas.drawPath(path5, paint);

        Path path6 = new Path();

        path6.moveTo(186, 360);

        path6.lineTo(214, 360);

        path6.lineTo(230, 392);

        path6.lineTo(200, 420);

        path6.lineTo(170, 392);

        path6.close();

        // 根据Path进行绘制,绘制五角形

        canvas.drawPath(path6, paint);

        // ----------设置字符大小后绘制----------

        paint.setTextSize(24);

        paint.setShader(null);

        // 绘制7个字符串

        canvas.drawText(getResources().getString(R.string.circle), 240, 50,paint);

        canvas.drawText(getResources().getString(R.string.square), 240, 120,paint);

        canvas.drawText(getResources().getString(R.string.rect), 240, 175,paint);

        canvas.drawText(getResources().getString(R.string.round_rect), 230,220, paint);

        canvas.drawText(getResources().getString(R.string.oval), 240, 260,paint);

        canvas.drawText(getResources().getString(R.string.triangle), 240, 325,paint);

        canvas.drawText(getResources().getString(R.string.pentagon), 240, 390,paint);

    }

}

时间: 2024-10-09 09:28:10

Android学习绘制图形的相关文章

[Canvas学习]绘制图形

学习目的:在Canvas上绘制矩形,三角形,直线,圆弧,曲线 栅格 栅格canvas grid,canvas元素默认被网格覆盖,栅格的起点是左上角坐标(0,0),元素的位置都是相对于栅格起点来定位的. 绘制矩形 API提供了三种方法绘制矩形 fillRect(x, y, width, height) 绘制填充的矩形 strokeRect(x, y, width, height) 绘制矩形边框 clearRect(x, y, width, height) 清除指定矩形区域变的完全透明 rect(x

Android学习之——图形图像处理(Bitmap、BitmapFactory)(一)

转载自http://blog.csdn.net/csxwc/article/details/10345235 Bitmap是Android系统中的图像处理的最重要的类之一.用它可以获取图像文件信息,对图像进行旋转,剪切,放大,缩小等操作. Bitmap代表一张位图,使我们在开发中常用的资源,下面就对Bitmap进行简单的介绍. Bitmap的获取方法: 1.使用BitmapDrawable BitmapDrawable里封装的图片就是一个Bitmap对象,我们要把Bitmap包装成BitmapD

Android虚线绘制,图形硬件加速

问题: 至于如何绘制虚线就不多说了,网上比比皆是,谈下这次开发碰到的问题: 1.从Android3.0开始,Android 2D的绘制流程就设计为能够更好地支持硬件加速.使用GPU的View在Canvas上进行画的操作时都会使用硬件加速.但是这样当我们定义shape绘制虚线时候,会发现绘制的并不是虚线而是一条实现. 当时搜了下解决办法,毫不犹豫直接在application属性上标记 <applicationandroid:hardwareAccelerated="true" ..

Android中android.graphics下面的绘制图形类Canvas,Paint,Bitmap,Drawable

1.概念区别: 很多网友刚刚开始学习Android平台,对于Drawable.Bitmap.Canvas和Paint它们之间的概念不是很清楚, 其实它们除了Drawable外早在Sun的J2ME中就已经出现了,但是在Android平台中,Bitmap.Canvas相关的都有所变化. 首先让我们理解下Android平台中的显示类是View,但是还提供了底层图形类android.graphics,今天所说的这些均为graphics底层图形接口. Bitmap - 称作位图,一般位图的文件格式后缀为b

[Android学习系列20]图形图像的一些事

参考: android图形系统详解一:Canvas android图形系统详解二:Drawables android图形系统详解三:形状Drawable和九宫格 android图形系统详解四:控制硬加速 android图形系统详解五:Android绘制模式 android图形系统详解六:View layer[Android学习系列20]图形图像的一些事,码迷,mamicode.com

Android OpenGL10 基本图形绘制 &lt;3&gt;

下面程序的opengl的图形是根据Opengl1.0版本API进行的. <a> : 首先绘制点: <1> : 新建一个android studio工程,这个工程参考前一篇坐标系的.工程名:PumpKinBasicGL10,主类如下: package org.durian.pumpkinbasicgl10; import android.app.Activity; import android.opengl.GLSurfaceView; import android.os.Bundl

OpenGL学习进程(4)第二课:绘制图形

本节是OpenGL学习的第二个课时,下面介绍如何用点和线来绘制图形:     (1)用点的坐标来绘制矩形: #include <GL/glut.h> void display(void) { // clear all pixels glClear(GL_COLOR_BUFFER_BIT); // draw yellow polygon (rectangle) with corners at glColor3f(1.0, 1.0, 0.0); glBegin(GL_POLYGON); //绘制开

Android OpenGL ES绘图教程之三 : 绘制图形

在定义了将要被OpenGL绘制的形状之后,你当然想要绘制它们.使用OpenGL ES 2.0绘制图形需要的代码可能比你想象的要多,因为API提供了大量的图形渲染管道控制接口. 这一章将介绍如何使用OpenGL ES 2.0 API绘制上一章中定义的形状 1. 初始化形状 在你做任何的绘制操作之前,你都必须进行初始化和加载计划绘制的形状.除非在执行的过程中形状所在的结构(原坐标)发生变化,你应该在render中的onSurfaceCreated()方法中初始化它们以提高内存和执行效率. publi

OpenGl学习进程(8)第六课:点、边和图形(三)绘制图形

本节是OpenGL学习的第六个课时,下面介绍OpenGL图形的相关知识:     (1)多边形的概念: 多边形是由多条线段首尾相连而形成的闭合区域.OpenGL规定,一个多边形必须是一个“凸多边形”.通过点.直线和多边形,就可以组合成各种几何图形.一段弧可以看成是是很多短的直线段相连,这些直线段足够短,以至于其长度小于一个像素的宽度.通过位于不同平面的相连的小多边形,还可以组成一个“曲面”. 什么是凸边形: 凸边形:多边形内任意两点所确定的线段都在多边形内,由此也可以推导出,凸多边形不能是空心的