本文实例为大家分享了Android SurfaceView画板操作的具体代码,供大家参考,具体内容如下
画板——画路径
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
|
package com.example.review.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; /** * 画板画路径 */ public class HuabanView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder surfaceHolder; private Path path = new Path(); public HuabanView(Context context) { super (context); } public HuabanView(Context context, AttributeSet attrs) { super (context, attrs); surfaceHolder = getHolder(); surfaceHolder.addCallback( this ); //获得surfaceview的生命周期 } public HuabanView(Context context, AttributeSet attrs, int defStyleAttr) { super (context, attrs, defStyleAttr); } public HuabanView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super (context, attrs, defStyleAttr, defStyleRes); } @Override public void surfaceCreated(SurfaceHolder holder) { new HuabanThread().start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); int action = event.getAction(); if (action == MotionEvent.ACTION_DOWN) { //按下 path.moveTo(x, y); } else if (action == MotionEvent.ACTION_MOVE) { //移动 path.lineTo(x, y); } return true ; } class HuabanThread extends Thread { @Override public void run() { super .run(); //TODO:画笔 Paint paint = new Paint(); paint.setColor(Color.BLACK); paint.setStrokeWidth( 20 ); paint.setStyle(Paint.Style.STROKE); paint.setAntiAlias( true ); //TODO:画布 while ( true ) { Canvas canvas = surfaceHolder.lockCanvas(); //避免空指针 if (canvas == null ){ return ; } canvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR); canvas.drawColor(Color.WHITE); canvas.drawPath(path,paint); surfaceHolder.unlockCanvasAndPost(canvas); } } } public void close(){ path.reset(); } } |
画板——画动态直线
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
|
package com.example.review.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; /** * 画板画路径 * 画动态直线 */ public class LineView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder surfaceHolder; private Path path = new Path(); private int x = 0 ; public LineView(Context context) { super (context); } public LineView(Context context, AttributeSet attrs) { super (context, attrs); surfaceHolder = getHolder(); surfaceHolder.addCallback( this ); //获得surfaceview的生命周期 } public LineView(Context context, AttributeSet attrs, int defStyleAttr) { super (context, attrs, defStyleAttr); } public LineView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super (context, attrs, defStyleAttr, defStyleRes); } @Override public void surfaceCreated(SurfaceHolder holder) { new HuabanThread().start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } class HuabanThread extends Thread { @Override public void run() { super .run(); //TODO:画笔 Paint paint = new Paint(); paint.setColor(Color.BLACK); paint.setStrokeWidth( 20 ); paint.setStyle(Paint.Style.STROKE); paint.setAntiAlias( true ); //TODO:画布 while ( true ) { Canvas canvas = surfaceHolder.lockCanvas(); //避免空指针 if (canvas == null ){ return ; } canvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR); canvas.drawColor(Color.WHITE); canvas.drawLine( 0 , 100 ,x++, 100 ,paint); surfaceHolder.unlockCanvasAndPost(canvas); } } } public void close(){ path.reset(); } } |
基本图形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//圆 canvas.drawOval( 50 , 100 , 150 , 200 ,paint); //半圆 canvas.drawArc( 500 , 500 , 700 , 700 , 20 , 180 , true ,paint); //矩形 canvas.drawRect( 100 , 300 , 250 , 400 ,paint); //三角形 canvas.drawLine( 100 , 450 , 0 , 600 ,paint); canvas.drawLine( 0 , 600 , 400 , 600 ,paint); canvas.drawLine( 100 , 450 , 400 , 600 ,paint); //梯形 canvas.drawLine( 100 , 700 , 200 , 700 ,paint); canvas.drawLine( 100 , 700 , 0 , 900 ,paint); canvas.drawLine( 0 , 900 , 400 , 900 ,paint); canvas.drawLine( 200 , 700 , 400 , 900 ,paint); //文字 canvas.drawText( "截图" , 100 , 1000 ,paint); |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_45697390/article/details/105804970