android基础-开发一个动画效果框架

本文介绍了一个基于Facebook弹性框架修改而来的动画效果框架,详细讲解了框架结构与使用方法,包括算法输出值、动画效果实现及优化方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android基础-开发一个动画效果框架

本框架是借用facebook的弹性框架修改而来,如有侵权请告知.当然这也不是个成熟的框架,还在优化中.

框架结构

在这里插入图片描述
这里其实很简单.说简单了就是一个looper循环一直作用在一个算法上,让后这个算法一直输出值.可将这个值作用于android的动画.
在这里插入图片描述

使用方法

如果你想做个动画 如弹性动画 (我们以AE的万能弹性动画为例)公式如下,UI用下面的公式做了个弹性动画.你想把它搬到android中.

amp = .1; 
freq = 2.0;
decay = 2.0; 
n = 0;
if (numKeys > 0)
{ 
 	n = nearestKey(time).index;
 	if (key(n).time > time) {n--;}
} 
if (n == 0)
{ 
	t = 0;
} else {
	t = time - key(n).time;
} 
if (n > 0)
{ 
	v = velocityAtTime(key(n).time - thisComp.frameDuration/10); 
	value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t); 
} else{ value }

  • 1 写个类(OverShoot)继承Elasticity接口.接口中有一下方法.
public double getValue(); //算法输出的值 
public String getId();//后续需要做连锁动画的id 
public boolean systemShouldAdvance();//算法停止条件 
public void advance(double d);//主要算法 
public Elasticity addListener(ElasticityListener newListener);//输出监听 public Elasticity removeListener(ElasticityListener listenerToRemove);//移除监听

这里贴出主要的算法函数.

public void advance(double realDeltaTime) 
{ 
	... 
	double value = v * amp * Math.sin(freq * 2 * T * Math.PI) / Math.exp(decay * T); 
	... 
	for (ElasticityListener listener : mListeners) 
	{ 
		if (notifyActivate) { 
		listener.onSpringActivate(this); 
		} 
		listener.onSpringUpdate(this); 
		if (notifyAtRest) { 
			listener.onSpringAtRest(this); 
		} 
	} 
}

这样这算法就完成了.double value = v * amp * Math.sin(freq * 2 * T * Math.PI) / Math.exp(decay * T);
系统不断调用advance()通过算法改变value的值.

  • 2 怎么使用.
final OverShoot mScaleOverShoot; 
private final BaseElasticitySystem mOverShootSystem = ElasticitySystem.create(); 
mScaleOverShoot = (OverShoot) mOverShootSystem.createElasticity(new OverShoot(mOverShootSystem)); mScaleOverShoot.setOverShootConfig(new OverShootConfig(velocity, 0.05, 3.0, 5.0)); 
mScaleOverShoot.addListener(new SimpleElasticityListener() 
{ 
	public void onSpringUpdate(Elasticity elasticity) 
	{
		float value = (float) elasticity.getValue(); 
		ViewHelper.setTranslationY(view, value); 
	} 
}
);
  • 3 成果展示

在这里插入图片描述

  • 4.后续优化
    a.这是个不完整的框架,后续将持续优化,github地址,https://github.com/djh123/Elasticity
    b.后续输出demo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沈万三djh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值