@@ -11,12 +11,13 @@ import android.widget.ImageView
11
11
class SVGACanvasDrawer (videoItem : SVGAVideoEntity , val dynamicItem : SVGADynamicEntity ) : SGVADrawer(videoItem) {
12
12
13
13
var canvas: Canvas ? = null
14
- var scaleEntity: ScaleEntity = ScaleEntity ()
15
14
15
+ private val scaleEntity = ScaleEntity ()
16
16
private val sharedPaint = Paint ()
17
17
private val sharedPath = Path ()
18
18
private val sharedPath2 = Path ()
19
19
private val sharedContentTransform = Matrix ()
20
+ private val sharedPathMap = HashMap <SVGAVideoShapeEntity ,Path >()
20
21
21
22
override fun drawFrame (frameIndex : Int , scaleType : ImageView .ScaleType ) {
22
23
super .drawFrame(frameIndex, scaleType)
@@ -112,17 +113,21 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
112
113
val canvas = this .canvas ? : return
113
114
enableScaleEntity()
114
115
sharedContentTransform.preConcat(sprite.frameEntity.transform)
116
+
115
117
sprite.frameEntity.shapes.forEach { shape ->
116
- sharedPath.reset()
117
118
shape.buildPath()
118
119
shape.shapePath?.let {
119
- sharedPath.addPath(it)
120
- }
121
- if (! sharedPath.isEmpty) {
122
- sharedPath.transform(sharedContentTransform)
123
120
sharedPaint.reset()
124
121
sharedPaint.isAntiAlias = videoItem.antiAlias
125
122
sharedPaint.alpha = (sprite.frameEntity.alpha * 255 ).toInt()
123
+
124
+ if (! sharedPathMap.containsKey(shape)){
125
+ val path = Path ()
126
+ path.set(shape.shapePath)
127
+ path.transform(sharedContentTransform)
128
+ sharedPathMap.put(shape,path)
129
+ }
130
+
126
131
shape.styles?.fill?.let {
127
132
if (it != 0x00000000 ) {
128
133
sharedPaint.color = it
@@ -133,10 +138,11 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
133
138
sharedPath2.transform(this .sharedContentTransform)
134
139
canvas.clipPath(sharedPath2)
135
140
}
136
- canvas.drawPath(sharedPath , sharedPaint)
141
+ canvas.drawPath(sharedPathMap.get(shape) , sharedPaint)
137
142
if (sprite.frameEntity.maskPath != = null ) canvas.restore()
138
143
}
139
144
}
145
+
140
146
shape.styles?.strokeWidth?.let {
141
147
if (it > 0 ) {
142
148
resetShapeStrokePaint(shape)
@@ -147,11 +153,12 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
147
153
sharedPath2.transform(this .sharedContentTransform)
148
154
canvas.clipPath(sharedPath2)
149
155
}
150
- canvas.drawPath(sharedPath , sharedPaint)
156
+ canvas.drawPath(sharedPathMap.get(shape) , sharedPaint)
151
157
if (sprite.frameEntity.maskPath != = null ) canvas.restore()
152
158
}
153
159
}
154
160
}
161
+
155
162
}
156
163
}
157
164
@@ -190,7 +197,7 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
190
197
shape.styles?.stroke?.let {
191
198
sharedPaint.color = it
192
199
}
193
-
200
+
194
201
val scale = requestScale()
195
202
shape.styles?.strokeWidth?.let {
196
203
sharedPaint.strokeWidth = it * scale
0 commit comments