package com.opensource.svgaplayer import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas import android.text.BoringLayout import android.text.StaticLayout import android.text.TextPaint import java.net.HttpURLConnection import java.net.URL /** * Created by cuiminghui on 2017/3/30. */ class SVGADynamicEntity { internal var dynamicHidden: HashMap = hashMapOf() internal var dynamicImage: HashMap = hashMapOf() internal var dynamicText: HashMap = hashMapOf() internal var dynamicTextPaint: HashMap = hashMapOf() internal var dynamicStaticLayoutText: HashMap = hashMapOf() internal var dynamicBoringLayoutText: HashMap = hashMapOf() internal var dynamicDrawer: HashMap Boolean> = hashMapOf() //点击事件回调map internal var mClickMap : HashMap = hashMapOf() internal var dynamicIClickArea: HashMap = hashMapOf() internal var dynamicDrawerSized: HashMap Boolean> = hashMapOf() internal var isTextDirty = false fun setHidden(value: Boolean, forKey: String) { this.dynamicHidden.put(forKey, value) } fun setDynamicImage(bitmap: Bitmap, forKey: String) { this.dynamicImage.put(forKey, bitmap) } fun setDynamicImage(url: String, forKey: String) { val handler = android.os.Handler() SVGAParser.threadPoolExecutor.execute { (URL(url).openConnection() as? HttpURLConnection)?.let { try { it.connectTimeout = 20 * 1000 it.requestMethod = "GET" it.connect() it.inputStream.use { stream -> BitmapFactory.decodeStream(stream)?.let { handler.post { setDynamicImage(it, forKey) } } } } catch (e: Exception) { e.printStackTrace() } finally { try { it.disconnect() } catch (disconnectException: Throwable) { // ignored here } } } } } fun setDynamicText(text: String, textPaint: TextPaint, forKey: String) { this.isTextDirty = true this.dynamicText.put(forKey, text) this.dynamicTextPaint.put(forKey, textPaint) } fun setDynamicText(layoutText: StaticLayout, forKey: String) { this.isTextDirty = true this.dynamicStaticLayoutText.put(forKey, layoutText) } fun setDynamicText(layoutText: BoringLayout, forKey: String) { this.isTextDirty = true BoringLayout.isBoring(layoutText.text,layoutText.paint)?.let { this.dynamicBoringLayoutText.put(forKey,layoutText) } } fun setDynamicDrawer(drawer: (canvas: Canvas, frameIndex: Int) -> Boolean, forKey: String) { this.dynamicDrawer.put(forKey, drawer) } fun setClickArea(clickKey: List) { for(itemKey in clickKey){ dynamicIClickArea.put(itemKey,object : IClickAreaListener { override fun onResponseArea(key: String, x0: Int, y0: Int, x1: Int, y1: Int) { mClickMap.let { if(it.get(key) == null){ it.put(key, intArrayOf(x0,y0,x1,y1)) }else{ it.get(key)?.let { it[0] = x0 it[1] = y0 it[2] = x1 it[3] = y1 } } } } }) } } fun setClickArea(clickKey: String) { dynamicIClickArea.put(clickKey, object : IClickAreaListener { override fun onResponseArea(key: String, x0: Int, y0: Int, x1: Int, y1: Int) { mClickMap.let { if (it.get(key) == null) { it.put(key, intArrayOf(x0, y0, x1, y1)) } else { it.get(key)?.let { it[0] = x0 it[1] = y0 it[2] = x1 it[3] = y1 } } } } }) } 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() this.dynamicImage.clear() this.dynamicText.clear() this.dynamicTextPaint.clear() this.dynamicStaticLayoutText.clear() this.dynamicBoringLayoutText.clear() this.dynamicDrawer.clear() this.dynamicIClickArea.clear() this.mClickMap.clear() this.dynamicDrawerSized.clear() } }