Android 动画 - AlphaAnimation渐变动画

本文详细介绍了Android中AlphaAnimation的使用,包括通过XML和Java代码创建渐变动画,以及动画属性的解析。重点讲解了android:fillAfter和android:fillBefore属性对动画结束状态的影响,以及如何通过android:repeatCount和android:repeatMode控制动画的重复行为。

AlphaAnimation:透明度渐变动画

创建AlphaAnimation有两种方式

  1. XML文件+Java代码
  2. Java代码方式

XML文件+Java代码
这里是一个完整的Alpha动画XML动画的所有属性
这里写图片描述

文件目录:res/anim/alpha.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
      android:duration="3000"
      android:fillAfter="true"
      android:fillBefore="false"
      android:fromAlpha="1.0"
      android:interpolator="@android:anim/linear_interpolator"
      android:repeatCount="-1"
      android:repeatMode="restart"
      android:startOffset="2000"
      android:toAlpha="0.3"/>
  • android:duration:动画持续的时长,单位是毫秒
  • android:fillAfter:动画结束之后是否保持动画的最终状态;true,表示保持动画的最终状态
  • android:fillBefore:动画结束之后是否保持动画开始前的状态;true,表示恢复到动画开始前的状态
  • android:fromAlpha:动画开始的透明度,取值0.0~1.0,0.0表示完全透明,1.0表示保持原有状态不变
  • android:interpolator:动画插值器。是实现动画不规则运动的一种方式,后面讲到
  • android:repeatCount:动画重复的次数。指定动画重复播放的次数,如果你需要无限循环播放,请填写一个小于0的数值,我一般写-1
  • android:repeatMode:动画重复的Mode,有reverse和restart两种,效果看后面
  • android:startOffset:动画播放延迟时长,就是调用start之后延迟多少时间播放动画
  • android:toAlpha:动画最终的透明度,取值和android:fromAlpha一样

Java代码加载XML文件动画

     Toast.makeText(XmlViewAnimationActivity.this, "startAnimation", Toast.LENGTH_SHORT).show();
     AlphaAnimation alphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(XmlViewAnimationActivity.this, R.anim.alpha);
     mIvImg.startAnimation(alphaAnimation);

属性详解

android:duration:就不用说了,动画的持续时长
左图:android:fillAfter=”true”    右图:android:fillBefore=”true”
这里写图片描述 这里写图片描述

  • 当fillAfter为true时,动画结束之后图片保持了动画最终的透明度0.3显示
  • 当fillBefore为true时,动画结束之后图片恢复到了原有的透明度1.0显示

PS:这两个属性是相冲突的,设置一个就好了,不建议同时为true存在,经测试同时为true时,fillAfter的优先级要比fillBefore大,显示为fillAfter=true的状态

android:fromAlpha动画开始时的透明度。没什么好讲的,
android:interpolator动画的插值器。系统默认的是线性插值器@android:anim/linear_interpolator ,不在这里写了,下一篇文章详细写这个
android:repeatCount动画重复的次数。如果你需要指定动画重复的次数,直接写次数就好了,如果需要动画无限循环,请写一个小于0的数,一般写-1,

android:repeatMode有两种模式反转reverse和重新开始restart,看看效果就明白什么意思了
这里写图片描述 这里写图片描述

  • reverse:动画是从一开始的1.0渐变成0.3,然后在从0.3渐变为1.0,重复往返
  • restart:冻哈是从一开始的1.0渐变成0.3,然后图片从0.3突变为1.0,然后在渐变成0.3,重复往返,

android:startOffset动画的延迟时长,单位是毫秒

     AlphaAnimation alphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(XmlViewAnimationActivity.this, R.anim.alpha);
     mIvImg.startAnimation(alphaAnimation);

就是当调用mIvImg.startAnimation(alphaAnimation);之后延迟的时间

Java代码方式创建动画
用XML文件的形式创建会提供设置AlphaAnimation相应的属性,同样Java代码也提供了相应的方法去设置

   public void startAlphaAnimation(){
        /**
         * @param fromAlpha 开始的透明度,取值是0.0f~1.0f,0.0f表示完全透明, 1.0f表示和原来一样
         * @param toAlpha 结束的透明度,同上
         */
        AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.2f);
        //设置动画持续时长
        alphaAnimation.setDuration(3000);
        //设置动画结束之后的状态是否是动画的最终状态,true,表示是保持动画结束时的最终状态
        alphaAnimation.setFillAfter(true);
        //设置动画结束之后的状态是否是动画开始时的状态,true,表示是保持动画开始时的状态
        alphaAnimation.setFillBefore(true);
        //设置动画的重复模式:反转REVERSE和重新开始RESTART
        alphaAnimation.setRepeatMode(AlphaAnimation.REVERSE);
        //设置动画播放次数
        alphaAnimation.setRepeatCount(AlphaAnimation.INFINITE);
        //开始动画
        mIvImg.startAnimation(alphaAnimation);
        //清除动画
        mIvImg.clearAnimation();
        //同样cancel()也能取消掉动画
        alphaAnimation.cancel();
   }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值