@@ -30,24 +30,27 @@ import com.tencent.qgame.animplayer.inter.IAnimListener
3030import com.tencent.qgame.animplayer.inter.IFetchResource
3131import com.tencent.qgame.animplayer.inter.OnResourceClickListener
3232import com.tencent.qgame.animplayer.mask.MaskConfig
33+ import com.tencent.qgame.animplayer.textureview.InnerTextureView
3334import com.tencent.qgame.animplayer.util.ALog
3435import com.tencent.qgame.animplayer.util.IScaleType
3536import com.tencent.qgame.animplayer.util.ScaleType
3637import com.tencent.qgame.animplayer.util.ScaleTypeUtil
3738import java.io.File
3839
3940open class AnimView @JvmOverloads constructor(context : Context , attrs : AttributeSet ? = null , defStyleAttr : Int = 0 ):
41+ IAnimView ,
4042 FrameLayout (context, attrs, defStyleAttr),
4143 TextureView .SurfaceTextureListener {
4244
4345 companion object {
4446 private const val TAG = " ${Constant .TAG } .AnimView"
4547 }
48+ private val player: AnimPlayer
49+
4650 private val uiHandler by lazy { Handler (Looper .getMainLooper()) }
4751 private var surface: SurfaceTexture ? = null
48- private var player: AnimPlayer ? = null
4952 private var animListener: IAnimListener ? = null
50- private var innerTextureView: TextureView ? = null
53+ private var innerTextureView: InnerTextureView ? = null
5154 private var lastFile: FileContainer ? = null
5255 private val scaleTypeUtil = ScaleTypeUtil ()
5356
@@ -90,14 +93,15 @@ open class AnimView @JvmOverloads constructor(context: Context, attrs: Attribute
9093 init {
9194 hide()
9295 player = AnimPlayer (this )
93- player? .animListener = animProxyListener
96+ player.animListener = animProxyListener
9497 }
9598
9699
97- fun prepareTextureView () {
100+ override fun prepareTextureView () {
98101 uiHandler.post {
99102 removeAllViews()
100- innerTextureView = TextureView (context).apply {
103+ innerTextureView = InnerTextureView (context).apply {
104+ player = this @AnimView.player
101105 isOpaque = false
102106 surfaceTextureListener = this @AnimView
103107 layoutParams = scaleTypeUtil.getLayoutParam(this )
@@ -106,21 +110,21 @@ open class AnimView @JvmOverloads constructor(context: Context, attrs: Attribute
106110 }
107111 }
108112
109- fun getSurfaceTexture (): SurfaceTexture ? {
113+ override fun getSurfaceTexture (): SurfaceTexture ? {
110114 return innerTextureView?.surfaceTexture ? : surface
111115 }
112116
113117 override fun onSurfaceTextureSizeChanged (surface : SurfaceTexture , width : Int , height : Int ) {
114118 ALog .i(TAG , " onSurfaceTextureSizeChanged $width x $height " )
115- player? .onSurfaceTextureSizeChanged(width, height)
119+ player.onSurfaceTextureSizeChanged(width, height)
116120 }
117121
118122 override fun onSurfaceTextureUpdated (surface : SurfaceTexture ) {
119123 }
120124
121125 override fun onSurfaceTextureDestroyed (surface : SurfaceTexture ): Boolean {
122126 ALog .i(TAG , " onSurfaceTextureDestroyed" )
123- player? .onSurfaceTextureDestroyed()
127+ player.onSurfaceTextureDestroyed()
124128 uiHandler.post {
125129 innerTextureView?.surfaceTextureListener = null
126130 innerTextureView = null
@@ -132,7 +136,7 @@ open class AnimView @JvmOverloads constructor(context: Context, attrs: Attribute
132136 override fun onSurfaceTextureAvailable (surface : SurfaceTexture , width : Int , height : Int ) {
133137 ALog .i(TAG , " onSurfaceTextureAvailable" )
134138 this .surface = surface
135- player? .onSurfaceTextureAvailable(width, height)
139+ player.onSurfaceTextureAvailable(width, height)
136140 }
137141
138142 override fun onSizeChanged (w : Int , h : Int , oldw : Int , oldh : Int ) {
@@ -144,9 +148,9 @@ open class AnimView @JvmOverloads constructor(context: Context, attrs: Attribute
144148 override fun onAttachedToWindow () {
145149 ALog .i(TAG , " onAttachedToWindow" )
146150 super .onAttachedToWindow()
147- player? .isDetachedFromWindow = false
151+ player.isDetachedFromWindow = false
148152 // 自动恢复播放
149- if ((player? .playLoop ? : 0 ) > 0 ) {
153+ if ((player.playLoop ? : 0 ) > 0 ) {
150154 lastFile?.apply {
151155 startPlay(this )
152156 }
@@ -159,72 +163,68 @@ open class AnimView @JvmOverloads constructor(context: Context, attrs: Attribute
159163 if (belowKitKat()) {
160164 release()
161165 }
162- player? .isDetachedFromWindow = true
163- player? .onSurfaceTextureDestroyed()
166+ player.isDetachedFromWindow = true
167+ player.onSurfaceTextureDestroyed()
164168 }
165169
166- override fun dispatchTouchEvent (ev : MotionEvent ? ): Boolean {
167- val res = isRunning() && ev != null && player?.pluginManager?.onDispatchTouchEvent(ev) == true
168- return if (! res) super .dispatchTouchEvent(ev) else true
169- }
170170
171- open fun setAnimListener (animListener : IAnimListener ? ) {
171+ override fun setAnimListener (animListener : IAnimListener ? ) {
172172 this .animListener = animListener
173173 }
174174
175- open fun setFetchResource (fetchResource : IFetchResource ? ) {
176- player? .pluginManager? .getMixAnimPlugin()?.resourceRequest = fetchResource
175+ override fun setFetchResource (fetchResource : IFetchResource ? ) {
176+ player.pluginManager.getMixAnimPlugin()?.resourceRequest = fetchResource
177177 }
178178
179- open fun setOnResourceClickListener (resourceClickListener : OnResourceClickListener ? ) {
180- player? .pluginManager? .getMixAnimPlugin()?.resourceClickListener = resourceClickListener
179+ override fun setOnResourceClickListener (resourceClickListener : OnResourceClickListener ? ) {
180+ player.pluginManager.getMixAnimPlugin()?.resourceClickListener = resourceClickListener
181181 }
182182
183183 /* *
184184 * 兼容方案,优先保证表情显示
185185 */
186186 open fun enableAutoTxtColorFill (enable : Boolean ) {
187- player? .pluginManager? .getMixAnimPlugin()?.autoTxtColorFill = enable
187+ player.pluginManager.getMixAnimPlugin()?.autoTxtColorFill = enable
188188 }
189189
190- fun setLoop (playLoop : Int ) {
191- player? .playLoop = playLoop
190+ override fun setLoop (playLoop : Int ) {
191+ player.playLoop = playLoop
192192 }
193193
194- fun supportMask (isSupport : Boolean , isEdgeBlur : Boolean ) {
195- player? .supportMaskBoolean = isSupport
196- player? .maskEdgeBlurBoolean = isEdgeBlur
194+ override fun supportMask (isSupport : Boolean , isEdgeBlur : Boolean ) {
195+ player.supportMaskBoolean = isSupport
196+ player.maskEdgeBlurBoolean = isEdgeBlur
197197 }
198198
199- fun updateMaskConfig (maskConfig : MaskConfig ? ) {
200- player? .updateMaskConfig(maskConfig)
199+ override fun updateMaskConfig (maskConfig : MaskConfig ? ) {
200+ player.updateMaskConfig(maskConfig)
201201 }
202202
203203
204204 @Deprecated(" Compatible older version mp4, default false" )
205205 fun enableVersion1 (enable : Boolean ) {
206- player? .enableVersion1 = enable
206+ player.enableVersion1 = enable
207207 }
208208
209209 // 兼容老版本视频模式
210210 @Deprecated(" Compatible older version mp4" )
211211 fun setVideoMode (mode : Int ) {
212- player? .videoMode = mode
212+ player.videoMode = mode
213213 }
214214
215- fun setFps (fps : Int ) {
216- player? .fps = fps
215+ override fun setFps (fps : Int ) {
216+ player.fps = fps
217217 }
218218
219- fun setScaleType (type : ScaleType ) {
219+ override fun setScaleType (type : ScaleType ) {
220220 scaleTypeUtil.currentScaleType = type
221221 }
222222
223- fun setScaleType (scaleType : IScaleType ) {
223+ override fun setScaleType (scaleType : IScaleType ) {
224224 scaleTypeUtil.scaleTypeImpl = scaleType
225225 }
226226
227- fun startPlay (file : File ) {
227+ override fun startPlay (file : File ) {
228228 try {
229229 val fileContainer = FileContainer (file)
230230 startPlay(fileContainer)
@@ -233,7 +233,7 @@ open class AnimView @JvmOverloads constructor(context: Context, attrs: Attribute
233233 }
234234 }
235235
236- fun startPlay (assetManager : AssetManager , assetsPath : String ) {
236+ override fun startPlay (assetManager : AssetManager , assetsPath : String ) {
237237 try {
238238 val fileContainer = FileContainer (assetManager, assetsPath)
239239 startPlay(fileContainer)
@@ -243,28 +243,32 @@ open class AnimView @JvmOverloads constructor(context: Context, attrs: Attribute
243243 }
244244
245245
246- fun startPlay (fileContainer : FileContainer ) {
246+ override fun startPlay (fileContainer : FileContainer ) {
247247 ui {
248248 if (visibility != View .VISIBLE ) {
249249 ALog .e(TAG , " AnimView is GONE, can't play" )
250250 return @ui
251251 }
252- if (player? .isRunning() == false ) {
252+ if (! player.isRunning()) {
253253 lastFile = fileContainer
254- player? .startPlay(fileContainer)
254+ player.startPlay(fileContainer)
255255 } else {
256256 ALog .i(TAG , " is running can not start" )
257257 }
258258 }
259259 }
260260
261261
262- fun stopPlay () {
263- player?.stopPlay()
262+ override fun stopPlay () {
263+ player.stopPlay()
264+ }
265+
266+ override fun isRunning (): Boolean {
267+ return player.isRunning()
264268 }
265269
266- fun isRunning (): Boolean {
267- return player?.isRunning() ? : false
270+ override fun getRealSize (): Pair < Int , Int > {
271+ return scaleTypeUtil.getRealSize()
268272 }
269273
270274 private fun hide () {
0 commit comments