需要添加直播接口
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
package uts.sdk.modules.atomicx.kotlin
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import com.opensource.svgaplayer.SVGACallback
|
||||
import com.opensource.svgaplayer.SVGAImageView
|
||||
import com.opensource.svgaplayer.SVGAParser
|
||||
import com.opensource.svgaplayer.SVGAVideoEntity
|
||||
import io.dcloud.uts.console
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileNotFoundException
|
||||
import java.io.InputStream
|
||||
import java.net.URL
|
||||
|
||||
class SVGAAnimationView(context: Context) : FrameLayout(context), SVGACallback {
|
||||
private val svgaParser: SVGAParser
|
||||
private val svgaImageView: SVGAImageView
|
||||
private var svgaCallback: SVGACallback? = null
|
||||
|
||||
init {
|
||||
svgaImageView = SVGAImageView(context)
|
||||
val lp: FrameLayout.LayoutParams =
|
||||
FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
|
||||
addView(svgaImageView, lp)
|
||||
svgaImageView.loops = 1
|
||||
svgaImageView.callback = this
|
||||
svgaParser = SVGAParser.shareParser()
|
||||
svgaParser.init(context)
|
||||
}
|
||||
|
||||
fun setCallback(callback: SVGACallback) {
|
||||
svgaCallback = callback
|
||||
}
|
||||
|
||||
// val playUrl = "/sdcard/Android/data/uni.app.UNIFA697C8/images/sports_car.svga"
|
||||
fun startAnimation(playUrl: String) {
|
||||
console.log("startAnimation playUrl: ", playUrl)
|
||||
// Logger.e(TAG + "startAnimation, playUrl: $playUrl")
|
||||
|
||||
if (playUrl.isNullOrEmpty()) {
|
||||
console.error("startAnimation, playUrl is empty")
|
||||
// Logger.e(TAG + "startAnimation, playUrl is empty")
|
||||
svgaCallback?.onFinished()
|
||||
return
|
||||
}
|
||||
|
||||
if (playUrl.endsWith(".svga") && isUrl(playUrl)) {
|
||||
decodeFromURL(playUrl)
|
||||
} else {
|
||||
decodeFromInputStream(playUrl)
|
||||
}
|
||||
}
|
||||
|
||||
private fun isUrl(url: String): Boolean = url.startsWith("http") || url.startsWith("https")
|
||||
|
||||
fun stopAnimation() {
|
||||
svgaImageView.stopAnimation(true)
|
||||
}
|
||||
|
||||
private fun decodeFromURL(playUrl: String) {
|
||||
console.log("decodeFromURL, playUrl: ", playUrl)
|
||||
|
||||
svgaParser.decodeFromURL(URL(playUrl), object : SVGAParser.ParseCompletion {
|
||||
override fun onComplete(videoItem: SVGAVideoEntity) {
|
||||
console.log("decodeFromURL onComplete, videoItem: ", videoItem)
|
||||
// Logger.i(TAG + "startAnimation decodeFromURL, videoItem: $videoItem")
|
||||
|
||||
svgaImageView.setVisibility(View.VISIBLE)
|
||||
svgaImageView.setVideoItem(videoItem)
|
||||
svgaImageView.startAnimation()
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
console.log("===== decodeFromURL failed")
|
||||
// Logger.e(TAG + "decodeFromURL failed, playUrl: $playUrl")
|
||||
svgaCallback?.onFinished()
|
||||
}
|
||||
},)
|
||||
}
|
||||
|
||||
private fun decodeFromInputStream(filePath: String) {
|
||||
console.log("decodeFromInputStream, filePath: ", filePath)
|
||||
val stream = openInputStream(filePath)
|
||||
if (stream == null) {
|
||||
console.log("decodeFromInputStream, filePath is null")
|
||||
// Logger.e(TAG + "decodeFromInputStream failed, filePath is null")
|
||||
return
|
||||
}
|
||||
svgaParser.decodeFromInputStream(stream, "", object : SVGAParser.ParseCompletion {
|
||||
override fun onComplete(videoItem: SVGAVideoEntity) {
|
||||
console.log("======startAnimation decodeFromInputStream start: ", videoItem)
|
||||
// Logger.i(TAG + "decodeFromInputStream start: videoItem: $videoItem")
|
||||
svgaImageView.setVisibility(VISIBLE)
|
||||
svgaImageView.setVideoItem(videoItem)
|
||||
svgaImageView.startAnimation()
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
console.log("======decodeFromInputStream parse failed: ", filePath)
|
||||
// Logger.e(TAG + "decodeFromInputStream parse failed, filePath: $filePath")
|
||||
svgaCallback?.onFinished()
|
||||
}
|
||||
}, true, null, "", )
|
||||
}
|
||||
|
||||
override fun onFinished() {
|
||||
console.log("SVGAAnimationView onFinished")
|
||||
// Logger.i(TAG + "onFinished")
|
||||
svgaImageView.setVisibility(View.GONE)
|
||||
svgaCallback?.onFinished()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
}
|
||||
|
||||
override fun onRepeat() {
|
||||
}
|
||||
|
||||
override fun onStep(frame: Int, percentage: Double) {
|
||||
}
|
||||
|
||||
private fun openInputStream(path: String): InputStream? {
|
||||
try {
|
||||
val file = File(path)
|
||||
if (file.exists()) {
|
||||
return FileInputStream(file)
|
||||
}
|
||||
} catch (e: FileNotFoundException) {
|
||||
Log.i(TAG, " " + e.localizedMessage)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "UTS-SVGAAnimationView: "
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user