Skip to content

Commit cf181b9

Browse files
authored
cache path in drawer
cache path in drawer
1 parent 7f4bba3 commit cf181b9

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

library/src/main/java/com/opensource/svgaplayer/SVGACanvasDrawer.kt

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import android.widget.ImageView
1111
class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicEntity) : SGVADrawer(videoItem) {
1212

1313
var canvas: Canvas? = null
14-
var scaleEntity:ScaleEntity = ScaleEntity()
1514

15+
private val scaleEntity = ScaleEntity()
1616
private val sharedPaint = Paint()
1717
private val sharedPath = Path()
1818
private val sharedPath2 = Path()
1919
private val sharedContentTransform = Matrix()
20+
private val sharedPathMap = HashMap<SVGAVideoShapeEntity,Path>()
2021

2122
override fun drawFrame(frameIndex: Int, scaleType: ImageView.ScaleType) {
2223
super.drawFrame(frameIndex, scaleType)
@@ -112,17 +113,21 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
112113
val canvas = this.canvas ?: return
113114
enableScaleEntity()
114115
sharedContentTransform.preConcat(sprite.frameEntity.transform)
116+
115117
sprite.frameEntity.shapes.forEach { shape ->
116-
sharedPath.reset()
117118
shape.buildPath()
118119
shape.shapePath?.let {
119-
sharedPath.addPath(it)
120-
}
121-
if (!sharedPath.isEmpty) {
122-
sharedPath.transform(sharedContentTransform)
123120
sharedPaint.reset()
124121
sharedPaint.isAntiAlias = videoItem.antiAlias
125122
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+
126131
shape.styles?.fill?.let {
127132
if (it != 0x00000000) {
128133
sharedPaint.color = it
@@ -133,10 +138,11 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
133138
sharedPath2.transform(this.sharedContentTransform)
134139
canvas.clipPath(sharedPath2)
135140
}
136-
canvas.drawPath(sharedPath, sharedPaint)
141+
canvas.drawPath(sharedPathMap.get(shape), sharedPaint)
137142
if (sprite.frameEntity.maskPath !== null) canvas.restore()
138143
}
139144
}
145+
140146
shape.styles?.strokeWidth?.let {
141147
if (it > 0) {
142148
resetShapeStrokePaint(shape)
@@ -147,11 +153,12 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
147153
sharedPath2.transform(this.sharedContentTransform)
148154
canvas.clipPath(sharedPath2)
149155
}
150-
canvas.drawPath(sharedPath, sharedPaint)
156+
canvas.drawPath(sharedPathMap.get(shape), sharedPaint)
151157
if (sprite.frameEntity.maskPath !== null) canvas.restore()
152158
}
153159
}
154160
}
161+
155162
}
156163
}
157164

@@ -190,7 +197,7 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
190197
shape.styles?.stroke?.let {
191198
sharedPaint.color = it
192199
}
193-
200+
194201
val scale = requestScale()
195202
shape.styles?.strokeWidth?.let {
196203
sharedPaint.strokeWidth = it * scale

0 commit comments

Comments
 (0)