Android动画之视图动画和属性动画

本文详细介绍了Android的视图动画(View Animation)和属性动画(Property Animation),包括AlphaAnimation、RotateAnimation、ScaleAnimation、TranslateAnimation、AnimationSet等视图动画的基本操作,并探讨了ValueAnimator、ObjectAnimator、TimeAnimator、PropertyValuesHolder、Keyframe和AnimatorSet等属性动画的使用。通过实例展示了如何用代码和XML创建这些动画,强调了视图动画只改变显示效果而不改变属性,而属性动画则是通过改变控件属性实现动画效果。最后,还展示了如何实现一个简单的倒计时功能作为应用场景。
摘要由CSDN通过智能技术生成

Android 动画分为两大类,分别是视图动画(View Animation)和属性动画(Property Animation)。对于这两种动画,都能够使用xml和代码的形式定义动画。

注:布局动画相关博客已经发布,有兴趣可跳转Android动画之布局动画

View Animation

视图动画是Android最基础的动画,在API 1中就已经加入,不需考虑兼容性,但由于其动画只是作用于视图上,而不会由该控件的属性,所以有很多的局限性。

视图动画的基类是Animation其下包含了四个直接的子类

  • AlphaAnimation: 透明度动画
  • TranslateAnimation:平移动画
  • ScaleAnimation:缩放动画
  • RotateAnimation:旋转动画
  • AnimationSet:动画集合

Animation 公共常用方法

xml属性 java 方法 解释
android:duration setDuration(long) 设置动画执行的时间
android:fillAfter setFillAfter(boolean) 设置动画是否保持其结束时的状态,默认false,不保存
android:fillBefore setFillBefore(boolean) 设置动画结束时是否回到其动画初始之前的状态,默认为true。当设置为false时,需要fillEnabled属性为true
android:fillEnabled setFillEnable(boolean) 当该属性设置为true时,fillBefore(false)属性才能生效。
android:interpolator setInterpolator(Interpolator) 设置插值器,及动画执行的变化的速率。及一直匀速,或前快后慢等
android:repeatCount setRepeatCount(int) 设置动画重复执行的次数,默认为0,及不重复执行
android:repeatMode setRepeatMode(int) 设置动画重复执行的模式,可取值REVERSE:重复执行时,按照倒序。RESTART:从头开始
android:startOffset setStartOffset(long) 设置动画延迟执行的时间

View Animation 通过xml文件构造动画时,其资源文件存放在 res-》anim。 这个需要我们手动创建anim文件夹。

我们将实现如下例子,用以学习View Animation
这里写图片描述

AlphaAnimation

  • java代码定义动画

//初始透明度,结束时的透明度  取值范围1.0~0.0
        AlphaAnimation anim= new AlphaAnimation(1,0);
        //RepeatCount ,动画执行结束后的重复次数,如果大于0,则重复次数。默认是0
        //如果小于0,默认是Animation.INFINITE
        anim.setRepeatCount(1); //重复1次
        //Animation.RESTART  从头开始。  Animation.REVERSE :反转
        anim.setRepeatMode(Animation.REVERSE);  
        anim.setDuration(1000);


        img.startAnimation(anim);
  • xml定义动画
    创建 res-》anim-》view_alpha.xml 文件。
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:repeatMode="reverse"
    android:repeatCount="1"
    android:fromAlpha="1"
    android:toAlpha="0"
    >
 <!--
    fromAlpha  : 初始透明度
    toAlpha: 目标透明度
    -->

</alpha>

在java代码中通过AnimationUtils加载xml文件,构造动画对象。对于View Aniamtion,都是通过该方法加载xml文件。

Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.view_alpha);
img.startAnimation(animation);

RotateAnimation 旋转动画

  • java 代码创建

        RotateAnimation anim = new RotateAnimation(0f,180f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        anim.setDuration(500);
        //设置为true ,则保持动画结束后的状态,默认false
        anim.setFillAfter(true); 

        img.startAnimation(anim);

在RotateAnimation中最全参数的构造方法如下RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)参数解释如下:

  • fromDegrees:起始的度数
  • toDegrees:结束时的度数
  • pivotXTypepivotYType:旋转时参照的动画中心点的位置类型。可选值:RELATIVE_TO_SELF依据自身为参照。RELATIVE_TO_PARENT 依据其所在的父控件为参照
  • pivotXValuepivotYValue:百分比值。与上面的参数配合使用。例如对于X轴来说,如果类型是RELATIVE_TO_SELF,值是0.5f,则就是位于当前控件x轴的中心。

  • xml创建动画

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration = "500"
    android:fillAfter = "true"
    android:fromDegrees="0"
    android:toDegrees="180"
    android:pivotX="50%"
    android:pivotY="50%"
    >

    <!--
    android:duration 动画从开始到结束持续的时长,单位为毫秒
    android:fromDegrees 旋转开始的角度
    android:toDegrees 旋转结束的角度
    android:pivotX 旋转中心点的X坐标,纯数字表示相对于View本身左边缘的像素偏移量;
                    带"%"后缀时表示相对于View本身左边缘的百分比偏移量;带"%p"后缀时表示相对于父View左边缘的百分比偏移量
    android:pivotY 旋转中心点的Y坐标,纯数字表示相对于View本身顶部边缘的像素偏移量;
                    带"%"后缀时表示相对于View本身顶部边缘的百分比偏移量;带"%p"后缀时表示相对于父View顶部边缘的百分比偏移量

    -->

</
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值