Skip to content

Commit be255f9

Browse files
committed
add callback.
1 parent 0db7ae3 commit be255f9

File tree

2 files changed

+112
-6
lines changed

2 files changed

+112
-6
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.opensource.svgaplayer_react
2+
3+
import android.content.Context
4+
import android.util.AttributeSet
5+
import com.facebook.react.bridge.Arguments
6+
import com.facebook.react.bridge.ReactContext
7+
import com.facebook.react.uimanager.events.RCTEventEmitter
8+
import com.opensource.svgaplayer.SVGACallback
9+
import com.opensource.svgaplayer.SVGAImageView
10+
11+
/**
12+
* Created by cuiminghui on 2017/6/16.
13+
*/
14+
class RCTSVGAImageView @JvmOverloads constructor(
15+
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
16+
) : SVGAImageView(context, attrs, defStyleAttr) {
17+
18+
internal var currentState: String? = null
19+
20+
init {
21+
callback = object : SVGACallback {
22+
23+
override fun onPause() { }
24+
25+
override fun onFinished() {
26+
(context as? ReactContext)?.let {
27+
it.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "onFinished", Arguments.createMap())
28+
}
29+
}
30+
31+
override fun onRepeat() { }
32+
33+
override fun onStep(frame: Int, percentage: Double) {
34+
(context as? ReactContext)?.let {
35+
val map = Arguments.createMap()
36+
map.putInt("value", frame)
37+
it.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "onFrame", map)
38+
}
39+
(context as? ReactContext)?.let {
40+
val map = Arguments.createMap()
41+
map.putDouble("value", percentage)
42+
it.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "onPercentage", map)
43+
}
44+
}
45+
46+
}
47+
}
48+
49+
}
Lines changed: 63 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,28 @@
11
package com.opensource.svgaplayer_react
22

33
import android.content.Context
4-
import android.support.annotation.NonNull
54
import com.facebook.react.uimanager.SimpleViewManager
65
import com.facebook.react.uimanager.ThemedReactContext
76
import com.facebook.react.uimanager.annotations.ReactProp
8-
import com.opensource.svgaplayer.SVGAImageView
97
import com.opensource.svgaplayer.SVGAParser
108
import com.opensource.svgaplayer.SVGAVideoEntity
119
import java.net.URL
1210

1311
/**
1412
* Created by cuiminghui on 2017/6/16.
1513
*/
16-
class RCTSVGAPlayerManager: SimpleViewManager<SVGAImageView>() {
14+
class RCTSVGAPlayerManager: SimpleViewManager<RCTSVGAImageView>() {
1715

1816
override fun getName(): String {
1917
return "SVGAPlayer"
2018
}
2119

22-
override fun createViewInstance(reactContext: ThemedReactContext?): SVGAImageView {
23-
return SVGAImageView(reactContext as Context)
20+
override fun createViewInstance(reactContext: ThemedReactContext?): RCTSVGAImageView {
21+
return RCTSVGAImageView(reactContext as Context)
2422
}
2523

2624
@ReactProp(name = "source")
27-
fun setSource(view: SVGAImageView, source: String) {
25+
fun setSource(view: RCTSVGAImageView, source: String) {
2826
if (source.startsWith("http") || source.startsWith("https")) {
2927
try {
3028
SVGAParser(view.context).parse(URL(source), object: SVGAParser.ParseCompletion {
@@ -36,6 +34,65 @@ class RCTSVGAPlayerManager: SimpleViewManager<SVGAImageView>() {
3634
})
3735
} catch (e: Exception) {}
3836
}
37+
else {
38+
try {
39+
SVGAParser(view.context).parse(source, object: SVGAParser.ParseCompletion {
40+
override fun onComplete(videoItem: SVGAVideoEntity) {
41+
view.setVideoItem(videoItem)
42+
view.startAnimation()
43+
}
44+
override fun onError() { }
45+
})
46+
} catch (e: Exception) {}
47+
}
48+
}
49+
50+
@ReactProp(name = "loops", defaultInt = 0)
51+
fun setLoops(view: RCTSVGAImageView, loops: Int) {
52+
view.loops = loops
53+
}
54+
55+
@ReactProp(name = "clearsAfterStop", defaultBoolean = true)
56+
fun setClearsAfterStop(view: RCTSVGAImageView, clearsAfterStop: Boolean) {
57+
view.clearsAfterStop = clearsAfterStop
58+
}
59+
60+
@ReactProp(name = "currentState")
61+
fun setCurrentState(view: RCTSVGAImageView, currentState: String) {
62+
view.currentState = currentState
63+
when (currentState) {
64+
"start" -> {
65+
view.startAnimation()
66+
}
67+
"pause" -> {
68+
view.pauseAnimation()
69+
}
70+
"stop" -> {
71+
view.stopAnimation()
72+
}
73+
"clear" -> {
74+
view.stopAnimation(true)
75+
}
76+
else -> {
77+
78+
}
79+
}
80+
}
81+
82+
@ReactProp(name = "toFrame", defaultInt = -1)
83+
fun setToFrame(view: RCTSVGAImageView, toFrame: Int) {
84+
if (toFrame < 0) {
85+
return
86+
}
87+
view.stepToFrame(toFrame, view.currentState?.equals("play") ?: false)
88+
}
89+
90+
@ReactProp(name = "toPercentage", defaultFloat = -1.0f)
91+
fun setToPercentage(view: RCTSVGAImageView, toPercentage: Float) {
92+
if (toPercentage < 0) {
93+
return
94+
}
95+
view.stepToPercentage(toPercentage.toDouble(), view.currentState?.equals("play") ?: false)
3996
}
4097

4198
}

0 commit comments

Comments
 (0)