/
Practice12PathEffectView.java
105 lines (87 loc) · 3.19 KB
/
Practice12PathEffectView.java
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
package com.geekholt.practiceui.view.lesson2;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.ComposePathEffect;
import android.graphics.CornerPathEffect;
import android.graphics.DashPathEffect;
import android.graphics.DiscretePathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathDashPathEffect;
import android.graphics.PathEffect;
import android.graphics.SumPathEffect;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
public class Practice12PathEffectView extends View {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
Path path = new Path();
PathEffect cornerPathEffect = new CornerPathEffect(20);
PathEffect discretePathEffect = new DiscretePathEffect(20, 5);
PathEffect dashPathEffect = new DashPathEffect(new float[]{20, 10, 5, 10}, 0);
PathEffect pathDashPathEffect;
PathEffect sumPathEffect = new SumPathEffect(dashPathEffect, discretePathEffect);
PathEffect composePathEffect = new ComposePathEffect(dashPathEffect, discretePathEffect);
public Practice12PathEffectView(Context context) {
super(context);
}
public Practice12PathEffectView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public Practice12PathEffectView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
{
paint.setStyle(Paint.Style.STROKE);
path.moveTo(50, 100);
path.rLineTo(50, 100);
path.rLineTo(80, -150);
path.rLineTo(100, 100);
path.rLineTo(70, -120);
path.rLineTo(150, 80);
Path dashPath = new Path();
dashPath.lineTo(20, -30);
dashPath.lineTo(40, 0);
dashPath.close();
pathDashPathEffect = new PathDashPathEffect(dashPath, 50, 0, PathDashPathEffect.Style.MORPH);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 使用 Paint.setPathEffect() 来设置不同的 PathEffect
// CornerPathEffect
paint.setPathEffect(cornerPathEffect);
canvas.drawPath(path, paint);
canvas.save();
canvas.translate(500, 0);
// DiscretePathEffect
paint.setPathEffect(discretePathEffect);
canvas.drawPath(path, paint);
canvas.restore();
canvas.save();
canvas.translate(0, 200);
// DashPathEffect
paint.setPathEffect(dashPathEffect);
canvas.drawPath(path, paint);
canvas.restore();
canvas.save();
canvas.translate(500, 200);
// PathDashPathEffect
paint.setPathEffect(pathDashPathEffect);
canvas.drawPath(path, paint);
canvas.restore();
canvas.save();
canvas.translate(0, 400);
// SumPathEffect
paint.setPathEffect(sumPathEffect);
canvas.drawPath(path, paint);
canvas.restore();
canvas.save();
canvas.translate(500, 400);
// ComposePathEffect
paint.setPathEffect(composePathEffect);
canvas.drawPath(path, paint);
canvas.restore();
paint.setPathEffect(null);
}
}