属性动画学习使用总结

作者: 鱼鱼鱼三条鱼ii | 来源:发表于2018-11-11 17:15 被阅读6次

Android 属性动画总结

  Android属性动画是我们自定义View不可缺少的一部分知识,我们日常使用的补间动画都可以被属性动画来代替。下面是自己在巩学习属性动画时总结的的一些知识,由浅入深,在我们以后的开发中做出各种炫酷的动画效果。

属性动画的优点

属性动画不在局限视图View对象,我们不仅能实现补间动画的效果,还能自定义各种各样的动画效果。

属性动画的使用步骤

  1. 实例化属性动画对象
  2. 设置属性动画的时长
  3. 启动属性动画

下面我将详细介绍简单的属性动画的使用方法。方便我们更好的理解和使用。

1.实例化属性动画对象
 属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画设置监听器等。
ValueAnimator类
 通过不断控制 值 的变化,再不断 手动 赋给对象的属性,从而实现动画效果。主要有下面三个方法。
 1.ValueAnimator.ofInt()  以整型数值过渡。
 2.ValueAnimator.oFloat() 以浮点型数值过渡。
 3.ValueAnimator.ofObject()以对象的形式过渡。
 ValueAnimator使用主要有以下两种用法。
用途
1. 实现补间动画的效果
// 传入的参数解释
//设置的对象
//补间动画的类别
//变化的值
 ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(myView, "alpha", 1.0f, 0.5f);
  ObjectAnimator scaleXAnim = ObjectAnimator.ofFloat(myView, "scaleX", 0.0f, 1.0f);
  ObjectAnimator scaleYAnim = ObjectAnimator.ofFloat(myView, "scaleY", 0.0f, 2.0f);
  ObjectAnimator rotateAnim = ObjectAnimator.ofFloat(myView, "rotation", 0, 360);
  ObjectAnimator transXAnim = ObjectAnimator.ofFloat(myView, "translationX", 100, 400);
  ObjectAnimator transYAnim = ObjectAnimator.ofFloat(myView, "tranlsationY", 100, 750);
2.实现属性值的变化
// 步骤1:设置动画属性的初始值 & 结束值
ValueAnimator anim = ValueAnimator.ofInt(0, 3);
        // 1. 创建动画实例
        // 2. 将传入的多个Int参数将值从0平滑过渡到1
        // 如果传入了3个Int参数 a,b,c ,则是先从a平滑过渡到b,再从b平滑过渡到C,以此类推
// 步骤2:设置动画的播放各种属性
        anim.setDuration(2000);
        // 设置动画运行的时长
        
        anim.setStartDelay(200);
        // 设置动画延迟播放时间

        anim.setRepeatCount(0);
        // 设置动画重复播放次数 = 重放次数+1
        // 动画播放次数 = -1时,动画无限重复
        
        anim.setRepeatMode(ValueAnimator.RESTART);
        // 设置重复播放动画模式
        // ValueAnimator.RESTART(默认):正序重放
        // ValueAnimator.REVERSE:倒序回放
     
// 步骤3:将改变的值手动赋值给对象的属性值:通过动画的更新监听器
       
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {

                int currentValue = (Integer) animation.getAnimatedValue();
                // 获得改变后的值
        // 步骤4:将改变后的值赋给对象的属性值
                View.setproperty(currentValue);

       // 步骤5:刷新视图,即重新绘制,从而实现动画效果
                View.requestLayout();
                
                
            }
        });

        anim.start();
        // 启动动画
    }

ValueAnimator.ofloat()使用方法和上面基本相同,就不在详细介绍。

在介绍ValueAnimator.ofObeject()之前要先介绍插值器和估值器。在使用ofObeject()要涉及到自定义估值器。

Interpolator的概念其实我们并不陌生,在补间动画中我们就使用到了。他就是用来控制动画快慢节奏的;而在属性动画中,TimeInterpolator 也是类似的作用;TimeInterpolator 继承自Interpolator。我们可以继承TimerInterpolator 以自己的方式控制动画变化的节奏,也可以使用Android 系统提供的Interpolator。

估值器(TypeEvaluator)决定 值 的具体变化数值

自定义估值器

TypeEvaluator是个接口,我们只要实现这个接口,并在我们的属性动画中设置就可以。

// 实现贝塞尔曲线的估值器,返回曲线上每一点的坐标
传入的参数为当前百分比 0-1
起始点的坐标
结束点的坐标
public class LoveEvaluator implements TypeEvaluator<PointF> {
    private PointF p1,p2;
    public LoveEvaluator(PointF p1,PointF p2){
        this.p1 = p1;
        this.p2 = p2;
    }
    @Override
    public PointF evaluate(float v, PointF p0, PointF p3) {
        PointF pointF1 = new PointF();
        pointF1.x = p0.x * (1-v)*(1-v)*(1-v)
                + 3*p1.x*v*(1-v)*(1-v)
                +3*p2.x*v*v*(1-v)
                +p3.x *v*v*v;
        pointF1.y = p0.y * (1-v)*(1-v)*(1-v)
                + 3*p1.y*v*(1-v)*(1-v)
                +3*p2.y*v*v*(1-v)
                +p3.y *v*v*v;

        return pointF1;
    }
}

为属性动画设置估值器

 LoveEvaluator loveEvaluator = new LoveEvaluator(p1,p2);
        ValueAnimator bezierAnimator = ObjectAnimator.ofObject(loveEvaluator,p0,p3);

        bezierAnimator.setDuration(10000);
        bezierAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                PointF pointF = (PointF) valueAnimator.getAnimatedValue();
                // 不断改变视图的位置
                iv.setX(pointF.x);
                iv.setY(pointF.y);
            }
});

这样控件的运动轨迹就是按我们自定义的轨迹运动。
属性动画在自定义View中经常用到,我们可以多加练习,配合属性动画做出各种炫酷的UI效果。

相关文章

  • 属性动画学习使用总结

    Android 属性动画总结 属性动画的优点 属性动画的使用步骤 实例化属性动画对象 设置属性动画的时长 启动属性...

  • Android动画总结

    本文总结常用属性方法等,详细学习可使用如下郭霖大神文章: Android属性动画完全解析(上),初识属性动画的基本...

  • Android开发学习——Day25(属性动画)

    学习目的 掌握属性动画的使用方法,实现真正意义上的“动画”。 学习过程 理解属性动画的本质,熟悉其方法,对其灵活使...

  • 安卓自定义动画

    本篇简书主要总结一下今天学习自定义动画效果的知识点,学习内容主要包括 1.补间动画和属性动画的区别 2.属性动画的...

  • iOS核心动画高级技巧(笔记)——(七)显式动画

    属性动画 CABasicAnimation 找到一篇很详细的CABasicAnimation使用总结 CAKeyf...

  • Android 动画实战-仿微博雷达功能

    前言## 在应用中使用动画,可以给用户带来良好的交互体验。通过之前对Android动画的分类总结,尝试了使用属性动...

  • CAAnimation常用属性一览表

    动画基础知识 动画的属性和解释 常用KeyPath总结 场景间过渡属性 转场动画

  • 动画(二)

    这期动画是对基础动画的一个小结。动画的基本属性请看:iOS动画一 说到总结基础动画再总结下属性吧。想要的动画的动画...

  • 【iOS动画】学习笔记第一弹(View Animation)

    本文是笔者学习iOS动画的一些小总结; View Animation 动画其实就是UIView基本属性(anima...

  • CSS-3D知识

    1.CSS动画 1.1 CSS动画属性-animation animation:为CSS动画属性,使用该属性可以替...

网友评论

    本文标题:属性动画学习使用总结

    本文链接:https://www.haomeiwen.com/subject/wbogxqtx.html