|
|
4 месяцев назад | |
|---|---|---|
| .. | ||
| src | 4 месяцев назад | |
| .gitignore | 5 месяцев назад | |
| CLAUDE.md | 5 месяцев назад | |
| README.md | 5 месяцев назад | |
| build.gradle | 4 месяцев назад | |
| consumer-rules.pro | 5 месяцев назад | |
| proguard-rules.pro | 5 месяцев назад | |
功能说明
//动效视图统一使用EffectView
<com.adealink.frame.effect.view.EffectView
android:id="@+id/effect_view"
android:layout_width="200dp"
android:layout_height="200dp" />
EffectView提供了add、play、pause、stop共4个动效播放控制方法
//play是默认的动效播放状态,用于启动动效播放
binding.effectView.play()
//add不修改播放状态,用于往动效队列增加待播放动效资源
binding.effectView.add(SVGAEffectEntity("rose.svga", PathType.ASSERT))
//pause设置动效播放为暂停状态,暂停状态会完整当前正在播放动效,不会再启动下个动效播放,但可以动效队列可以继续接收动效
binding.effectView.pause()
//stop设置动效播放为停止状态,停止状态会立即终止动效播放,同时清空当前动效队列,并且不会再继续接收新动效
binding.effectView.stop()
val effect: IEffect by lazy { Effect.create(EffectConfig()) }
effect.play() //启动所有动效播放
effect.pause() //暂停所有动效播放,不会清空所有播放队列
effect.stop() //停止所有动效播放,会清空所有播放队列
动效播放框架集成了动效播放队列管理,并提供了动效优先级管理能力
//EffectEntity提供了priority动效优先级控制字段
abstract class IEffectEntity {
/**
* priority为20位字符串,按字典顺序排序,前10位为小写英文字母,可用于外部定义动效分类优先级,后10位使用generatePrioritySuffix()方法生成的递增数字序列,用于同类优先级动效按先后顺序入队
*/
open val priority: String = defaultPriority
}
//优先级示例
"aaaaaaaaaa0000000000" > "aaaaaaaaaa0000000001" > "bbbbbbbbbb0000000002" > "bbbbbbbbbb0000000003"
动效播放框架支持在不修改动效框架的前提下,拓展支持任意类型的动效播放,下面以SVGA动效支持为例进行说明
package com.adealink.frame.effect.svga
//实现IEffectView接口,实现类需要keep不能混淆
@Keep
class SVGAEffectView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : SVGAImageView(context, attrs, defStyleAttr), IEffectView
enum class PathType {
ASSERT,
URL
}
//实现IEffectEntity接口,定义effectViewClazz路径,用于反射实例具体视图
data class SVGAEffectEntity(
override val path: String,
val pathType: PathType,
val loopCount: Int = 1, //播放次数,<=0表示无限次
override val priority: String = defaultPriority
) : IEffectEntity<SVGAEffectView>() {
override fun createEffectView(
ctx: Context,
attrs: AttributeSet?,
defStyleAttr: Int
): SVGAEffectView {
return SVGAEffectView(ctx, attrs, defStyleAttr)
}
}
IEffectView和IEffectEntity会作为动效框架基础包提供,具体动效类型拓展包基于该base构建,项目只需要增加拓展包依赖即可完成新动效类型支持