• 安卓开发_浅谈Android动画(四)


    Property动画

    概念:属性动画,即通过改变对象属性的动画。

    特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置

    一、重要的动画类及属性值:

    1、  ValueAnimator 基本属性动画类

    方法

    描述

    setDuration(long duration)

    设置动画持续时间的方法

    setEvaluator(TypeEvaluator value)

    设置插值计算的类型

    setInterpolator(TimeInterpolator value)

    设置时间插值器的类型

    addUpdateListener(ValueAnimator.AnimatorUpdateListener listener)

    更新动画对象的监听事件

    setRepeatCount(int value)

    设置动画重复执行的次数

    setRepeatMode(int value)

    设置动画重复方式

    addListener(Animator.AnimatorListener l)

    设置监听事件

    1、  动画开始时的监听

    2、  动画结束时的监听

    3、  动画重新开始时的监听

    start()

    开始执行动画

    cancel()

    停止当前执行的动画,属性值会停止在当前执行位置

    end()

    结束动画,属性值会停止在结束位置,即使没有播放完动画

    2、  ObjectAnimator 对象属性动画类,继承自ValueAnimator

    方法

    描述

    • ofFloat(T target, Property<T, Float> property, float... values)

    第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的float类型的变化值

    • ofInt(T target, Property<T, Integer> property, int... values)

    第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的int类型的变化值

    • ofObject(Object target, String propertyName, TypeEvaluator evaluator, Object... values)

    第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的object类型的变化值

    setTarget(Object target)

    设置执行动画的对象

    3、  TimeInterpolator 时间插值器

    设置动画执行的动作效果

    Eg:animator.setInterpolator(new BounceInterpolator() //设置动画效果为跳跃

    类型

    描述

    AccelerateInterpolator

    加速,开始时慢中间加速

    DecelerateInterpolator

    减速,开始时快然后减速

    AccelerateDecelerateInterolator

    先加速后减速,开始结束时慢,中间加速

    AnticipateInterpolator

    反向 ,先向相反方向改变一段再加速播放

    AnticipateOvershootInterpolator

    反向加超越,先向相反方向改变,再加速播放,会超出目的值然后缓慢移动至目的值

    BounceInterpolator

    跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为85,77,70,80,90,100

    CycleIinterpolator

    循环,动画循环一定次数,值的改变为一正弦函数:Math.sin(2 * mCycles * Math.PI * input)

    LinearInterpolator

    线性,线性均匀改变

    OvershottInterpolator

    超越,最后超出目的值然后缓慢改变到目的值

    4、  PropertyValuesHolder

    作用:对一个View执行多个属性动画,该类对多属性动画进行了优化,会合并一些invalidate()来减少刷新视图,该类在3.1中引入

    5、TypeEvaluator  插值计算的类型

    (1)、IntEvaluator:属性的值类型为int

    (2)、FloatEvaluator:属性的值类型为float

    (3)、ArgbEvaluator:属性的值类型为十六进制颜色值

    6、常用动画属性

    (1)translationX,translationY:移动坐标

    (2)rotation,rotationX,rotationY:旋转,rotation用于2D旋转角度,3D中用到后两个

    (3)scaleX,scaleY:缩放

    (4)alpha:透明度

    (5)backgroundColor:  背景

    二、动画Demo

    1、位移动画

     1 ValueAnimator animator = ObjectAnimator.ofFloat(image, "translationY", 300);//第一个参数为执行动画的对象 ImageView第二个参数为动画属性:y轴位移 ,第三个参数为value
     2             //动画执行的事件
     3             animator.setDuration(3000);
     4             animator.setRepeatCount(ValueAnimator.INFINITE); //设置循环次数:无限
     5             animator.setRepeatMode(ValueAnimator.REVERSE);   //设置循环方式:倒叙循环 
     6             
     7 //            设置加速效果
     8 //          animator.setInterpolator(new AccelerateDecelerateInterpolator());
     9             animator.setInterpolator(new BounceInterpolator()); //设置弹跳效果
    10             animator.start();

    效果:

    2、绕X轴旋转动画

    1 ValueAnimator animator = ObjectAnimator.ofFloat(image, "rotationX", 0,720); 
                  //第一个参数为执行动画的对象ImageView 第二个参数为动画属性,第三个参数为初始角度,第四个动画为结束角度
    2 animator.setDuration(4000); 3 animator.setRepeatCount(ValueAnimator.INFINITE); 4 animator.setRepeatMode(ValueAnimator.REVERSE); 5 animator.start();

    效果图:

    3、图片绕xy轴转动,两个属性动作的情况

    1             PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("rotationY",0f,45f,90f,160f,260f,360f );
    2             PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("rotationX",0f,360f );
    3             
    4              ValueAnimator  animator = ObjectAnimator.ofPropertyValuesHolder(image,pvh1,pvh2);//将多个需要并发执行的动画合并执行
    5             animator.setDuration(4000);
    6             animator.setRepeatCount(ValueAnimator.INFINITE);
    7             animator.setRepeatMode(ValueAnimator.REVERSE);
    8             animator.start();

    效果图:

    4、多个属性动画一起执行的情况 

     1        AnimatorSet aSet = new AnimatorSet();
     2             ValueAnimator a1 = ObjectAnimator.ofFloat(image,"translationX",0f,200f);
     3             a1.setDuration(2000);
     4             
     5             ValueAnimator a2 = ObjectAnimator.ofFloat(1f,1.5f,1.0f);
     6             a2.addUpdateListener(new AnimatorUpdateListener() {
     7                 
     8                 @Override
     9                 public void onAnimationUpdate(ValueAnimator animation) {
    10                     // TODO Auto-generated method stub
    11                     //更新对象的属性的方法
    12                     float value = (Float) animation.getAnimatedValue();
    13                     image.setScaleX(value);
    14                     image.setScaleY(value);
    15                     
    16                 }
    17             });
    18             a2.setDuration(1000);
    19             
    20             //旋转
    21             ValueAnimator a3 = ObjectAnimator.ofFloat(image,"rotation",0f,360);
    22             a3.setDuration(3000);
    23             
    24             //渐变
    25             ValueAnimator a4 = ObjectAnimator.ofFloat(image,"alpha",1f,0f);
    26             a4.setDuration(1000);
    27             
    28             aSet.play(a1).with(a3);
    29             aSet.play(a2).after(a3);
    30             aSet.play(a2).with(a4);
    31             
    32             aSet.start();

    效果图:

    5、布局背景动画

    1 //改变主布局的背景实现动画效果
    2             animator = ObjectAnimator.ofInt(linearLayout,"backgroundColor",Color.WHITE,Color.BLUE,Color.GREEN,Color.RED);
    3             //设置颜色值得差值类型
    4             animator.setEvaluator(new ArgbEvaluator());
    5             animator.setDuration(5000);
    6             animator.setRepeatCount(ValueAnimator.INFINITE);
    7             animator.setRepeatMode(ValueAnimator.REVERSE);
    8             animator.start();

    效果图:

    --------------------------------------------------------------------------------------------------------------------------------

    相关知识:

    安卓开发_浅谈Android动画(一)

    安卓开发_浅谈Android动画(二)

    安卓开发_浅谈Android动画(三)

  • 相关阅读:
    C#开发微信公众平台-就这么简单(附Demo)
    Newtonsoft.Json高级用法
    C#获取文件的MD5码
    C#动态执行代码
    c#插件式开发
    利用反射执行代码
    yield关键字用法与解析(C# 参考)
    HttpContext.Current.Cache和HttpRuntime.Cache的区别,以及System.Runtime.Caching
    GZip压缩与解压缩
    Asp.Net 请求处理机制
  • 原文地址:https://www.cnblogs.com/xqxacm/p/4833005.html
Copyright © 2020-2023  润新知