androidcanvas绘图详解.docx

上传人:b****7 文档编号:9044273 上传时间:2023-02-02 格式:DOCX 页数:20 大小:90.58KB
下载 相关 举报
androidcanvas绘图详解.docx_第1页
第1页 / 共20页
androidcanvas绘图详解.docx_第2页
第2页 / 共20页
androidcanvas绘图详解.docx_第3页
第3页 / 共20页
androidcanvas绘图详解.docx_第4页
第4页 / 共20页
androidcanvas绘图详解.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

androidcanvas绘图详解.docx

《androidcanvas绘图详解.docx》由会员分享,可在线阅读,更多相关《androidcanvas绘图详解.docx(20页珍藏版)》请在冰豆网上搜索。

androidcanvas绘图详解.docx

androidcanvas绘图详解

AndroidCanvas绘图详解(图文)

摘要Android中使用图形处理引擎,2D部分是androidSDK内部自己提供,3D部分是用OpenGLES。

今天我们主要要了解的是2D相关的,如果你想看3D的话那么可以跳过这篇文章。

大部分2D使用的api都在和包中。

他们提供了图

Android中使用图形处理引擎,2D部分是androidSDK内部自己提供,3D部分是用OpenGLES。

今天我们主要要了解的是2D相关的,如果你想看3D的话那么可以跳过这篇文章。

大部分2D使用的api都在和包中。

他们提供了图形处理相关的:

Canvas、ColorFilter、Point(点)和RetcF(矩形)等,还有一些动画相关的:

AnimationDrawable、BitmapDrawable和TransitionDrawable等。

以图形处理来说,我们最常用到的就是在一个View上画一些图片、形状或者自定义的文本内容,这里我们都是使用Canvas来实现的。

你可以获取View中的Canvas对象,绘制一些自定义形状,然后调用View.invalidate方法让View重新刷新,然后绘制一个新的形状,这样达到2D动画效果。

下面我们就主要来了解下Canvas的使用方法。

Canvas对象的获取方式有两种:

一种我们通过重写方法,View中的Canvas对象会被当做参数传递过来,我们操作这个Canvas,效果会直接反应在View中。

另一种就是当你想创建一个Canvas对象时使用的方法:

1

2

Bitmapb=(100,100,

Canvasc=newCanvas(b);

上面代码创建了一个尺寸是100*100的Bitmap,使用它作为Canvas操作的对象,这时候的Canvas就是使用创建的方式。

当你使用创建的Canvas在bitmap上执行绘制方法后,你还可以将绘制的结果提交给另外一个Canvas,这样就可以达到两个Canvas协作完成的效果,简化逻辑。

但是androidSDK建议使用参数里提供的Canvas就好,没必要自己创建一个新的Canvas对象。

接下来我们看看Canvas提供我们哪些绘制图形的方法。

我们创建一个自定义View对象,使用onDraw方法提供的Canvas进行绘制图形。

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

package

import

import

import

import

import

import

import

publicclassCanvasDemoActivityextendsActivity{

@Override

protectedvoidonCreate(BundlesavedInstanceState){

(savedInstanceState);

setContentView(newCustomView1(this));

}

/**

*使用内部类自定义一个简单的View

*@authorAdministrator

*

*/

classCustomView1extendsView{

Paintpaint;

publicCustomView1(Contextcontext){

super(context);

paint=newPaint();

..

40,40,

50,50,

60,60,

70,70,

80,80,

90,90,

100,100

},paint);

}

1

2

3

4

5

6

7

8

9

10

@Override

protectedvoidonDraw(Canvascanvas){

RectFrect=newRectF(50,50,200,200);

(rect,paint);

}

}

1

2

3

4

5

6

7

8

9

10

11

@Override

protectedvoidonDraw(Canvascanvas){

RectFrect=newRectF(50,50,200,200);

(rect,

30,//x轴的半径

30,//y轴的半径

paint);

}

1

2

3

4

5

6

7

8

9

10

11

12

@Override

protectedvoidonDraw(Canvascanvas){

Pathpath=newPath();//定义一条路径

(10,10);//移动到坐标10,10

(50,60);

(200,80);

(10,10);

(path,paint);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

@Override

protectedvoidonDraw(Canvascanvas){

Pathpath=newPath();//定义一条路径

(10,10);//移动到坐标10,10

(50,60);

(200,80);

(10,10);

//(path,paint);

("Android777开发者博客",path,10,10,paint);

}

位置转换方法,和:

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

@Override

protectedvoidonDraw(Canvascanvas){

(true);

;

()/2,200);//将位置移动画纸的坐标点:

150,150

(0,0,100,paint);//画圆圈

//使用path绘制路径文字

();

(-75,-75);

Pathpath=newPath();

(newRectF(0,0,150,150),-180,180);

PaintcitePaint=newPaint(paint);

(14);

(1);

("",path,28,0,citePaint);

();

PainttmpPaint=newPaint(paint);//小刻度画笔对象

(1);

floaty=100;

intcount=60;//总刻度数

for(inti=0;i

if(i%5==0){

(0f,y,0,y+12f,paint);

(i/5+1),-4f,y+25f,tmpPaint);

}else{

(0f,y,0f,y+5f,tmpPaint);

}

(360/count,0f,0f);//旋转画纸

}

//绘制指针

;

(4);

(0,0,7,tmpPaint);

;

;

(0,0,5,tmpPaint);

(0,10,0,-65,paint);

}

上面几个例子基本已经将常用的*方法测试过了,我们结合一些事件,做一些有用户交互的应用:

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

package

import

import

import

import

import

import

import

import

import

import

publicclassCanvasDemoActivityextendsActivity{

@Override

protectedvoidonCreate(BundlesavedInstanceState){

(savedInstanceState);

setContentView(newCustomView1(this));

}

/**

*使用内部类自定义一个简单的View

*@authorAdministrator

*

*/

classCustomView1extendsView{

Paintpaint;

privateArrayListgraphics=newArrayList();

PointFpoint;

publicCustomView1(Contextcontext){

super(context);

paint=newPaint();//设置一个笔刷大小是3的黄色的画笔

;

(3);

}

@Override

publicbooleanonTouchEvent(MotionEventevent){

(newPointF(),()));

invalidate();//重新绘制区域

returntrue;

}

//在这里我们将测试canvas提供的绘制图形方法

@Override

protectedvoidonDraw(Canvascanvas){

for(PointFpoint:

graphics){

,paint);

}

//(canvas);

}

}

}

当用户点击时将出现一个小点,拖动时将画出一条用细点组成的虚线:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1