Skip to content

Commit b64f41d

Browse files
committed
bug-fix: clipPath ignores on SVGACanvasDrawer Shapes.
1 parent 9da3a37 commit b64f41d

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

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

+18-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
1414

1515
val sharedPaint = Paint()
1616
val sharedPath = Path()
17+
val sharedPath2 = Path()
1718
val sharedContentTransform = Matrix()
1819

1920
override fun drawFrame(frameIndex: Int, scaleType: ImageView.ScaleType) {
@@ -178,8 +179,7 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
178179
sharedContentTransform.reset()
179180
performScaleType(scaleType)
180181
sharedContentTransform.preConcat(sprite.frameEntity.transform)
181-
sprite.frameEntity.shapes.forEach {
182-
val shape = it
182+
sprite.frameEntity.shapes.forEach { shape ->
183183
sharedPath.reset()
184184
shape.shapePath?.let {
185185
sharedPath.addPath(it)
@@ -197,15 +197,31 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
197197
sharedPaint.color = it
198198
sharedPaint.alpha = (sprite.frameEntity.alpha * 255).toInt()
199199
sharedPaint.isAntiAlias = true
200+
if (sprite.frameEntity.maskPath !== null) canvas.save()
201+
sprite.frameEntity.maskPath?.let { maskPath ->
202+
sharedPath2.reset()
203+
maskPath.buildPath(sharedPath2)
204+
sharedPath2.transform(this.sharedContentTransform)
205+
canvas.clipPath(sharedPath2)
206+
}
200207
canvas.drawPath(sharedPath, sharedPaint)
208+
if (sprite.frameEntity.maskPath !== null) canvas.restore()
201209
}
202210
}
203211
shape.styles?.strokeWidth?.let {
204212
if (it > 0) {
205213
sharedPaint.reset()
206214
sharedPaint.alpha = (sprite.frameEntity.alpha * 255).toInt()
207215
resetShapeStrokePaint(shape)
216+
if (sprite.frameEntity.maskPath !== null) canvas.save()
217+
sprite.frameEntity.maskPath?.let { maskPath ->
218+
sharedPath2.reset()
219+
maskPath.buildPath(sharedPath2)
220+
sharedPath2.transform(this.sharedContentTransform)
221+
canvas.clipPath(sharedPath2)
222+
}
208223
canvas.drawPath(sharedPath, sharedPaint)
224+
if (sprite.frameEntity.maskPath !== null) canvas.restore()
209225
}
210226
}
211227
}

0 commit comments

Comments
 (0)