如何实现先渐显再渐隐的动画?

    我们知道在Android中Animation是实现动画的类,而AlphaAnimation是其子类,主要实现了透明度渐变的动画。我们可以在xml文件或者使用代码来令其渐隐或渐显。

    在实际项目中,也许产品会让你实现先渐显再渐隐的动画,这样使得下一个页面出现的不太突兀,那么怎么实现呢?

    

    其实,实现原理很简单。我们可以参考AlphaAnimation的源码,只需applyTransformation(float interpolatedTime, Transformation t)函数,将其中内容由线性变化变为折线段(先升后降)即可。代码如下:

   

public class FadeInOutAnimation extends Animation {
	/** fade-in到fade-out的转折点的defalut值*/
	public static final float DEFALUT_BREAK_POINT = 0.7f;

	private float mBreakPoint = 0;//fade-in到fade-out的转折点
	private float mFromAlpha;//fade-in的alpha起点
	private float mToAlpha;//最终完全显示时的的alpha

	public FadeInOutAnimation(float fromAlpha, float toAlpha) {
		this(fromAlpha, toAlpha, DEFALUT_BREAK_POINT);
	}

	public FadeInOutAnimation(float fromAlpha, float toAlpha, float breakpoint) {
		mBreakPoint = DEFALUT_BREAK_POINT;
		mFromAlpha = fromAlpha;
		mToAlpha = toAlpha;
	}

	@Override
	protected void applyTransformation(float interpolatedTime, Transformation t) {
		// TODO Auto-generated method stub
		// super.applyTransformation(interpolatedTime, t);
		final float alpha = mFromAlpha;
		float rate;
		
		//0-mBreakPoint处于fade-in阶段,mBreakPoint-1处于fade-out阶段
		if(interpolatedTime < mBreakPoint){
			rate  = mBreakPoint - 0;
			t.setAlpha(alpha + ((mToAlpha - alpha) * interpolatedTime / rate ));
		} else {
			rate  = 1 - mBreakPoint;
			t.setAlpha(mToAlpha - ((mToAlpha - alpha) * (interpolatedTime - mBreakPoint) / rate));
		}
		
	}

	@Override
	public boolean willChangeBounds() {
		// TODO Auto-generated method stub
		// return super.willChangeBounds();
		return false;
	}

	@Override
	public boolean willChangeTransformationMatrix() {
		// TODO Auto-generated method stub
		// return super.willChangeTransformationMatrix();
		return false;
	}
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值