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
|
class
CustomView1
extends
View{
private
Paint paint;
private
ArrayList<PointF> graphics =
new
ArrayList<PointF>();
private
Paint lPaint;
private
Path mPath;
private
int
of =
0
;
private
Boolean over =
false
;
private
float
mX, mY;
private
static
final
float
TOUCH_TOLERANCE =
4
;
public
CustomView1(Context context) {
super
(context);
paint =
new
Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.RED);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(
65
);
lPaint =
new
Paint(Paint.ANTI_ALIAS_FLAG);
lPaint.setColor(Color.BLACK);
lPaint.setStyle(Paint.Style.STROKE);
//空心
lPaint.setStrokeJoin(Paint.Join.ROUND);
lPaint.setStrokeCap(Paint.Cap.ROUND);
lPaint.setStrokeWidth(
5
);
mPath =
new
Path();
}
@Override
public
boolean
onTouchEvent(MotionEvent event) {
float
x = event.getX();
float
y = event.getY();
switch
(event.getAction()) {
case
MotionEvent.ACTION_DOWN:
over =
false
;
graphics.clear();
of=
0
;
graphics.add(
new
PointF(x, y));
touch_start(x, y);
invalidate();
break
;
case
MotionEvent.ACTION_MOVE:
graphics.add(
new
PointF(x, y));
touch_move(x, y);
invalidate();
break
;
case
MotionEvent.ACTION_UP:
over =
true
;
touch_up();
invalidate();
break
;
}
return
true
;
}
private
void
touch_start(
float
x,
float
y) {
mPath.reset();
mPath.moveTo(x, y);
mX = x;
mY = y;
}
private
void
touch_move(
float
x,
float
y) {
float
dx = Math.abs(x - mX);
float
dy = Math.abs(y - mY);
if
(dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
mPath.quadTo(mX, mY, (x + mX)/
2
, (y + mY)/
2
);
mX = x;
mY = y;
}
}
private
void
touch_up() {
mPath.lineTo(mX, mY);
}
@Override
protected
void
onDraw(Canvas canvas) {
// canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);
canvas.drawColor(Color.WHITE);
//清理
canvas.drawPath(mPath, lPaint);
if
(over&&graphics.size()>
0
){
canvas.drawPoint(graphics.get(of).x, graphics.get(of).y, paint);
of+=
1
;
if
(of<graphics.size()){
if
(of==graphics.size()-
1
){
mPath.reset();
//移动完成后移除线条
}
invalidate();
}
}
}
}
|
android 画线
最新推荐文章于 2022-04-03 10:11:10 发布