OpenAnim 实现的技术细节与使用 了解

谈一谈为何写 OpenAnim

项目地址:https://gitee.com/kumei/OpenAnim

OpenAnim 是一个动画库,基于 Android 的属性动画的封装。

在这里插入图片描述

因为项目中遇到一些痛点,所有萌生了写这个库的想法:

1. 代码中经常使用同一个差值器 interpolate或者typeEvaluator,多个项目重复使用.

插值器(Interpolator)和估值器(TypeEvaluator)是实现 复杂动画效果的关键

interpolate 是什么:插值器,动画的变化速率,时快,时慢,是有节奏的。

系统内置的插值器有几个(可以自定义):
AccelerateInterpolator:动画从开始到结束,变化率是一个加速的过程。
DecelerateInterpolator:动画从开始到结束,变化率是一个减速的过程。
CycleInterpolator:动画从开始到结束,变化率是循环给定次数的正弦曲线。
AccelerateDecelerateInterpolator:动画从开始到结束,变化率是先加速后减速的过程。
LinearInterpolator:动画从开始到结束,变化率是线性变化。
… …

typeEvaluator 又是什么:估值器,决定 值 的变化规律(匀速、加速blabla),即决定的是变化趋势;

系统内置的估值器有3个(可以自定义):
IntEvaluator:以整型的形式从初始值 - 结束值 进行过渡
FloatEvaluator:以浮点型的形式从初始值 - 结束值 进行过渡
ArgbEvaluator:以Argb类型的形式从初始值 - 结束值 进行过渡

// 以前的代码,需要自己去简单封装一下的,感觉不是很解耦。
// OpenAnim 参考了类似 Glide 的 公共配置模块,去全局配置 插值器,估值器 等等参数.
public class TestAnimModule implements AnimModule {

    @Override
    public void applyOptions(@NonNull Context context, @NonNull AnimConfigBuilder builder) {
        // builder.interpolate(new DecelerateInterpolator())
        builder
                // .duration(1000)
                // .typeEvaluator(new BounceEaseOut(500))
                .interpolate(new LinearInterpolator()); // 设置好插值器后,全局都会使用这个插值器. 
    }

}

// AndroidManifest.xml 中配置使用
<meta-data
	android:name="AnimModule"
	android:value="com.open.tvwidget.TestAnimModule" />
            

2. Activity, fragment, View 的生命周期如何绑定,使用了动画后每次都要自己释放,很烦

// 这里使用了 Lifecycle 来支持 生命周期监听. 
// 使用者只需要传入 Context 就可,对于使用者是无感的.
OpenAnim.with(this/*Activity,Context等来自Context的类*/)
        .into(mTestBtn)
        .start();

3. 在使用了AnimatorSet后,动画循环次数,设置的很麻烦.

// 因为只有 继承了ValueAnimator,setRepeatCount 才方便设置,比如使用了 AnimatorSet 就不是很方便了。
OpenAnim.with(this)
		.together(
			new TranslationXAnimator(500),
            new TranslationYAnimator(100))
        .duration(3000)
        .repeatCount(3) // 循环次数 : 1 ~ ValueAnimator.INFINITE(无限循环)
        .start();

4. 经常使用ObjectAnimator,ValueAnimator…,每次都要写
在这里插入图片描述

// OpenAnim 将放大,移动 等等都封装起来了.
// MoveXAnimator,RotationAnimator,ScaleXAnimator,AlphaAnimator
OpenAnim.with(this)
		.together(
			new TranslationXAnimator(500),
            new TranslationYAnimator(100))
        .start();    

4. 复杂的酷炫动画支持.
比如像下面这幅GIF显示的这种效果
在这里插入图片描述
还有这种效果
在这里插入图片描述
在这里插入图片描述
5. 支持XML动画

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值