Skip to content
This repository was archived by the owner on Feb 6, 2023. It is now read-only.

2.4.x dev #384

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file removed app/src/main/assets/rose_1.5.0.svga
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ private String randomSample() {
samples.add("EmptyState.svga");
samples.add("heartbeat.svga");
samples.add("posche.svga");
samples.add("rose_1.5.0.svga");
samples.add("rose_2.0.0.svga");
samples.add("test.svga");
samples.add("test2.svga");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ class SVGADynamicEntity {

internal var dynamicDrawer: HashMap<String, (canvas: Canvas, frameIndex: Int) -> Boolean> = hashMapOf()

internal var dynamicDrawerSized: HashMap<String, (canvas: Canvas, frameIndex: Int, width: Int, height: Int) -> Boolean> = hashMapOf()

internal var isTextDirty = false

fun setHidden(value: Boolean, forKey: String) {
Expand All @@ -38,7 +40,7 @@ class SVGADynamicEntity {

fun setDynamicImage(url: String, forKey: String) {
val handler = android.os.Handler()
thread {
SVGAParser.threadPoolExecutor.execute {
(URL(url).openConnection() as? HttpURLConnection)?.let {
try {
it.connectTimeout = 20 * 1000
Expand Down Expand Up @@ -77,6 +79,10 @@ class SVGADynamicEntity {
this.dynamicDrawer.put(forKey, drawer)
}

fun setDynamicDrawerSized(drawer: (canvas: Canvas, frameIndex: Int, width: Int, height: Int) -> Boolean, forKey: String) {
this.dynamicDrawerSized.put(forKey, drawer)
}

fun clearDynamicObjects() {
this.isTextDirty = true
this.dynamicHidden.clear()
Expand All @@ -85,6 +91,7 @@ class SVGADynamicEntity {
this.dynamicTextPaint.clear()
this.dynamicLayoutText.clear()
this.dynamicDrawer.clear()
this.dynamicDrawerSized.clear()
}

}
20 changes: 11 additions & 9 deletions library/src/main/java/com/opensource/svgaplayer/SVGAParser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class SVGAParser(private val context: Context) {
val cancelBlock = {
cancelled = true
}
Thread {
threadPoolExecutor.execute {
try {
if (HttpResponseCache.getInstalled() == null && !noCache) {
Log.e("SVGAParser", "SVGAParser can not handle cache before install HttpResponseCache. see https://github.com/yyued/SVGAPlayer-Android#cache")
Expand All @@ -63,7 +63,7 @@ class SVGAParser(private val context: Context) {
outputStream.write(buffer, 0, count)
}
if (cancelled) {
return@Thread
return@execute
}
ByteArrayInputStream(outputStream.toByteArray()).use {
complete(it)
Expand All @@ -75,18 +75,20 @@ class SVGAParser(private val context: Context) {
e.printStackTrace()
failure(e)
}
}.start()
}
return cancelBlock
}

}

var fileDownloader = FileDownloader()
private var threadPoolBlockingQueue = LinkedBlockingQueue<Runnable>()
private var threadPoolExecutor = ThreadPoolExecutor(3, 10, 60000, TimeUnit.MILLISECONDS, this.threadPoolBlockingQueue)

protected fun finalize() {
threadPoolExecutor.shutdown()
companion object {
private val threadPoolBlockingQueue = LinkedBlockingQueue<Runnable>()
internal var threadPoolExecutor = ThreadPoolExecutor(3, 10, 60000, TimeUnit.MILLISECONDS, threadPoolBlockingQueue)
fun setThreadPoolExecutor(executor: ThreadPoolExecutor) {
threadPoolExecutor = executor
}
}

fun decodeFromAssets(name: String, callback: ParseCompletion) {
Expand Down Expand Up @@ -131,9 +133,9 @@ class SVGAParser(private val context: Context) {
else {
inflate(bytes)?.let {
val videoItem = SVGAVideoEntity(MovieEntity.ADAPTER.decode(it), File(cacheKey))
// videoItem.prepare {
videoItem.prepare {
this.invokeCompleteCallback(videoItem, callback)
// }
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,13 @@ internal class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVG
it.invoke(canvas, frameIndex)
canvas.restore()
}
dynamicItem.dynamicDrawerSized[imageKey]?.let {
val frameMatrix = shareFrameMatrix(sprite.frameEntity.transform)
canvas.save()
canvas.concat(frameMatrix)
it.invoke(canvas, frameIndex, sprite.frameEntity.layout.width.toInt(), sprite.frameEntity.layout.height.toInt())
canvas.restore()
}
}

class ShareValues {
Expand Down