ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android:属性动画

2019-09-13 15:00:47  阅读:245  来源: 互联网

标签:动画 AnimatorSet ObjectAnimator Android View ValueAnimator 属性


属性动画是Android 3.0加入的,为了弥补View动画的不足,但是Android 3.0以下虽然可以使用动画兼容库但是其本质依旧是View动画

View动画的不足之处
动画效果单一,旋转,平移,缩放
影像动画,并没有改变本身的参数,需要交互式view的时候暴露缺陷
作用对象局促于View上

ValueAnimator 类
先改变值,然后 手动赋值 给对象的属性从而实现动画;是 间接 对对象属性进行操作;

ValueAnimator 对值进行操作

ValueAnimator.ofInt(int values)
ValueAnimator.ofFloat(float values)
ValueAnimator.ofObject(int values)  需要自定义估值器

ObjectAnimator 类
先改变值,然后 自动赋值 给对象的属性从而实现动画;是 直接对对象属性进行操作;

ObjectAnimator 继承自ValueAnimator类,即底层的动画实现机制是基于ValueAnimator类
ObjectAnimator 类针对的是任意对象 & 任意属性值,并不是单单针对于View对象

如果需要采用ObjectAnimator 类实现动画效果,那么需要操作的对象就必须有该属性的set() & get()
同理,针对上述另外的三种基本动画效果,View 也存在着setRotation()、getRotation()、setTranslationX()、getTranslationX()、setScaleY()、getScaleY()等set() & get() 。
AnimatorSet 类 可组合动画 实现方式有 XML设置 / Java代码设置

AnimatorSet.play(Animator anim) :播放当前动画 
AnimatorSet.after(long delay) :将现有动画延迟x毫秒后执行 
AnimatorSet.with(Animator anim) :将现有动画和传入的动画同时执行
AnimatorSet.after(Animator anim) :将现有动画插入到传入的动画之后执行 
AnimatorSet.before(Animator anim) : 将现有动画插入到传入的动画之前执行

Java代码实现

// 步骤1:设置需要组合的动画效果 
ObjectAnimator translation = ObjectAnimator.ofFloat(mButton, "translationX", curTranslationX, 300,curTranslationX); // 平移动画 
ObjectAnimator rotate = ObjectAnimator.ofFloat(mButton, "rotation", 0f, 360f); // 旋转动画 
ObjectAnimator alpha = ObjectAnimator.ofFloat(mButton, "alpha", 1f, 0f, 1f); // 透明度动画 
// 步骤2:创建组合动画的对象
 AnimatorSet animSet = new AnimatorSet(); 
// 步骤3:根据需求组合动画 
animSet.play(translation).with(rotate).before(alpha); 
animSet.setDuration(5000); 
// 步骤4:启动动画
 animSet.start();

xml实现

在value的目录下创建animator 资源文件夹 ,在此文件夹中创建xml文件
ordering是动画播放方式 :together和sequentially 代表同时和顺序执行俩个方式

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially">
    <set android:ordering="together">
        <objectAnimator android:propertyName="translationX" android:valueFrom="0dp" android:valueTo="300dp" android:duration="3000" android:valueType="floatType"/>
        <objectAnimator android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" android:duration="2000" android:valueType="floatType"/>
    </set>
    <set android:ordering="sequentially">
        <objectAnimator android:propertyName="alpha" android:valueFrom="1" android:valueTo="0" android:duration="500" android:valueType="floatType"/>
        <objectAnimator android:propertyName="alpha" android:valueFrom="0" android:valueTo="1" android:duration="500" android:valueType="floatType"/>
    </set>
</set>

标签:动画,AnimatorSet,ObjectAnimator,Android,View,ValueAnimator,属性
来源: https://blog.csdn.net/qq_38410236/article/details/100803386

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有