广告
返回顶部
首页 > 资讯 > 移动开发 >Android动画-属性动画
  • 224
分享到

Android动画-属性动画

属性Android 2022-06-06 13:06:16 224人浏览 独家记忆
摘要

属性动画 所谓属性动画,就是改变对象Object的属性来实现动画过程。属性动画是对View的动画的扩展,通过它可以实现更多漂亮的动画效果。同时属

属性动画

所谓属性动画,就是改变对象Object的属性来实现动画过程。属性动画是对View的动画的扩展,通过它可以实现更多漂亮的动画效果。同时属性动画的作用对象不仅仅是View,任何对象都可以。
属性动画的作用效果就是:在一个指定的时间段内将对象的一个属性的属性值动态地变化到另一个属性值。

ObjectAnimator
ObjectAnimator
            .ofFloat(mImageView, "rotationY", 0f, 360f)
            .setDuration(2000)
            .start();

ObjectAnimtor可以用ofInt、ofFloat、ofObject等静态方法,传入动画作用的目标Object、属性字段、属性开始值、属性中间值、属性结束值等参数来构造动画对象。 通过不断去调用对象属性的setter方法改变属性值,不断重绘实现动画过程.
xml实现属性动画,工程的res目录下创建animator文件,创建xml文件


private void startXmlPropertyAnimator() {
    Animator animator = AnimatorInflater.loadAnimator(getApplicationContext(),R.animator.property_animator);
    animator.setTarget(mImageView);
    animator.start();
}

当然也可以通过动画组合的形式来执行多个动画。AnimationSet

   Animator scaleXAnimator = ObjectAnimator.ofFloat(mImageView, "scaleX", 1, 0.5f);
    scaleXAnimator.setDuration(2000);
    Animator scaleYAnimator = ObjectAnimator.ofFloat(mImageView, "scaleY", 1, 0.5f);
    scaleYAnimator.setDuration(2000);
    Animator rotationXAnimator = ObjectAnimator.ofFloat(mImageView, "rotationX", 0, 360);
    rotationXAnimator.setDuration(2000);
    Animator rotationYAnimator = ObjectAnimator.ofFloat(mImageView, "rotationY", 0, 360);
    rotationYAnimator.setDuration(2000);
    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.play(scaleXAnimator)
            .with(scaleYAnimator)
            .before(rotationXAnimator)
            .after(rotationYAnimator);
    animatorSet.start();

AnimatorSet通过before、with、after三个方法可以组合多个属性动画,with表示与给定动画同时执行,before在给定动画执行之前执行,after表示在给定动画执行之后执行.
属性动画也可以在xml定义动画集

ValueAnimator

ValueAnimator是ObjectAnimator的父类,它继承自Animator。ValueAnimaotor同样提供了ofInt、ofFloat、ofObject等静态方法,传入的参数是动画过程的开始值、中间值、结束值来构造动画对象。可以将ValueAnimator看着一个值变化器,即在给定的时间内将一个目标值从给定的开始值变化到给定的结束值。在使用ValueAnimator时通常需要添加一个动画更新的监听器,在监听器中能够获取到执行过程中的每一个动画值。ValueAnimator的使用一般会结合更新监听器AnimatorUpdateListener,大多数时候是在自定义控件时使用。

在这里插入图片描述

下面看个列子
当点击箭头,会展开文本内容,当然同时伴随着动画出现。

 private void anim() {
        // 指示器旋转
        ValueAnimator valueAnimator1 = isClosed
                ? ValueAnimator.ofFloat(180, 0)
                : ValueAnimator.ofFloat(0, 180);
        valueAnimator1.setDuration(500);
        valueAnimator1.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float value = (float) animation.getAnimatedValue();
                mIvIndicator.setRotation(value);
            }
        });
        valueAnimator1.start();
        // 打开开关闭操作
        // 内容的高度
        final int answerHeight = mTvAnswer.getMeasuredHeight();
        ValueAnimator valueAnimator2 = isClosed
                ? ValueAnimator.ofInt(-answerHeight, 0)
                : ValueAnimator.ofInt(0, -answerHeight);
        valueAnimator2.setDuration(500);
        final MarginLayoutParams params = (MarginLayoutParams) mTvAnswer.getLayoutParams();
        valueAnimator2.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                // 接收内容的高度
                int value = (int) animation.getAnimatedValue();
                params.bottomMargin = value;
                // 设置高度变化
                mTvAnswer.setLayoutParams(params);
            }
        });
        valueAnimator2.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
            }
            @Override
            public void onAnimationEnd(Animator animation) {
                //记录动画结束的状态
                isClosed = !isClosed;
            }
            @Override
            public void onAnimationCancel(Animator animation) {
            }
            @Override
            public void onAnimationRepeat(Animator animation) {
            }
        });
        valueAnimator2.start();
    }
TypeEvaluator

属性动画计算器。ObjectAnimator和ValueAnimator都有ofObject方法,传入的都有一个TypeEvaluator类型的参数.TypeEvaluator是一个接口,有个方法avaluate

public T evaluate(float fraction, T startValue, T endValue);

要用属性动画来执行复杂对象的动画过程,就需要自定义TypeEvaluator,实现动画逻辑。

public class Circle {
    private int raduis;         // 半径
    private int color;          // 颜色
    private int elevation;      // 高度
    public Circle(int raduis, int color, int elevation) {
        this.raduis = raduis;
        this.color = color;
        this.elevation = elevation;
    }
    public int getRaduis() {
        return raduis;
    }
    public void setRaduis(int raduis) {
        this.raduis = raduis;
    }
    public int getColor() {
        return color;
    }
    public void setColor(int color) {
        this.color = color;
    }
    public int getElevation() {
        return elevation;
    }
    public void setElevation(int elevation) {
        this.elevation = elevation;
    }
}

自定义控件CircleView,将Circle作为它的一个属性:

public class CircleView extends View {
    private Circle circle;
    private Paint mPaint;
    public CircleView(Context context, AttributeSet attrs) {
        super(context, attrs);
        circle = new Circle(168, Color.RED, 0);
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
    }
    @Requiresapi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onDraw(canvas canvas) {
        super.onDraw(canvas);
        setElevation(circle.getElevation());
        mPaint.setColor(circle.getColor());
        canvas.drawCircle(getMeasuredHeight() / 2, getMeasuredHeight() / 2, circle.getRaduis(), mPaint);
    }
    public void setCircle(Circle circle) {
        this.circle = circle;
        postInvalidate();
    }
    public Circle getCircle() {
        return circle;
    }
}

方法的调用,创建三个圆,由半径168到300到450依次执行,当然还有颜色的变化,红色-绿色-蓝色,高度的变化。
ObjectAnimator使用:注意属性动画是通过反射获取,所以属性的名字是circle

private void start1() {
    Circle startCircle = new Circle(168, Color.RED, 0);
    Circle middleCircle = new Circle(300, Color.GREEN, 15);
    Circle endCircle = new Circle(450, Color.BLUE, 30);
    ObjectAnimator.ofObject(mCircleView, "circle", new CircleEvaluator(), startCircle, middleCircle, endCircle)
            .setDuration(5000)
            .start();
}

ValueAnimator使用:

private void start2() {
    Circle startCircle = new Circle(168, Color.RED, 0);
    Circle middleCircle = new Circle(300, Color.GREEN, 15);
    Circle endCircle = new Circle(450, Color.BLUE, 30);
    ValueAnimator valueAnimator = ValueAnimator.ofObject(new CircleEvaluator(), startCircle, middleCircle, endCircle);
    valueAnimator.setDuration(5000);
  //通过监听变化,给view赋值
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            Circle circle = (Circle) animation.getAnimatedValue();
            mCircleView.setCircle(circle);
        }
    });
    valueAnimator.start();
}

image.png
该文摘自:https://juejin.im/entry/58b3f07e570c35006932b067


作者:名字是真的不好起


--结束END--

本文标题: Android动画-属性动画

本文链接: https://www.lsjlt.com/news/29166.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android动画-属性动画
    属性动画 所谓属性动画,就是改变对象Object的属性来实现动画过程。属性动画是对View的动画的扩展,通过它可以实现更多漂亮的动画效果。同时属...
    99+
    2022-06-06
    属性 Android
  • Android属性动画
    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、常用API3.1 Valu...
    99+
    2023-12-22
    android nginx 运维
  • Android动画探索之属性动画
    这篇文章来总结下属性动画,通过下面几点来了解下属性动画的内容: 属性动画概述 属性动画工作原理 ValueAnimator ObjectAnim...
    99+
    2022-06-06
    属性 Android
  • Android 动画(View动画,帧动画,属性动画)详细介绍
    0. 前言  Android动画是面试的时候经常被问到的话题。我们都知道Android动画分为三类:View动画、帧动画和属性动画。 先对这三种动画做一个概述:...
    99+
    2022-06-06
    view 属性 动画 Android
  • Android帧动画、补间动画、属性动画用法详解
    在安卓开发中,经常会使用到一些动画,那么在开发中,如何使用这些动画呢? 帧动画:不是针对View做出一些形状上的变化,而是用于播放一张张的图片,例如一些开机动画,类似于电影播放...
    99+
    2022-06-06
    属性 补间动画 动画 Android
  • android 帧动画,补间动画,属性动画的简单总结
    帧动画——FrameAnimation 将一系列图片有序播放,形成动画的效果。其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable...
    99+
    2022-06-06
    属性 补间动画 动画 Android
  • Android动画 实现开关按钮动画(属性动画之平移动画)实例代码
    Android动画 实现开关按钮动画(属性动画之平移动画),最近做项目,根据项目需求,有一个这样的功能,实现类似开关的动画效果,经过自己琢磨及上网查找资料,终于解决了,这里就记...
    99+
    2022-06-06
    开关 属性 按钮 Android
  • Android 属性动画原理与DataBinding
    Android 属性动画原理与DataBinding 看到这个标题的时候你可能会有疑问,属性动画和 DataBinding 之间有什么关系?我个人理解的是:它们内部的实现思想有...
    99+
    2022-06-06
    属性 databinding 动画 Android
  • 图文详解Android属性动画
     Android中的动画分为视图动画(View Animation)、属性动画(Property Animation)以及Drawable动画。从Android 3....
    99+
    2022-06-06
    动画 Android
  • CSS3 动画属性
    CSS3 动画虽然transition在一定的时间内可以实现元素的初始状态在指定的时间范围过渡最终状态, 模拟一种过渡动画效果,但它的功能是非常有限的。 因此,CSS3 新增了一个动画属性animation。与过渡属性transition属...
    99+
    2023-01-31
    属性 动画
  • Android模拟开关按钮点击打开动画(属性动画之平移动画)
    在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率。另外说到动画,在Android里面支持两种动画:补间动...
    99+
    2022-06-06
    开关 属性 按钮 动画 Android
  • Android 属性动画:一文让你彻底了解和掌握属性动画用法
    本文目录属性动画概述属性动画用法对象动画(ObjectAnimator)方法1:Java代码实现对象动画方法2:XML实现对象动画值动画(Val...
    99+
    2022-06-06
    属性 动画 Android
  • Compose 动画艺术之属性动画探索
    目录Compose的属性动画参数方法体天亮了结尾前言 本篇文章是此专栏的第三篇文章,如果想阅读前两篇文章的话请点击下方链接: Compose 动画艺术探索之可见性动画示例详...
    99+
    2022-11-13
  • Android深入分析属性动画源码
    1.先看一段动画的代码实现 ObjectAnimator alpha = ObjectAnimator.ofFloat(view, "alpha", 1, 0,1); alpha.s...
    99+
    2022-11-13
  • Android源码解析之属性动画详解
    前言 大家在日常开发中离不开动画,属性动画更为强大,我们不仅要知道如何使用,更要知道他的原理。这样,才能得心应手。那么,今天,就从最简单的来说,了解下属性动画的原理。 Obj...
    99+
    2022-06-06
    属性 动画 Android
  • Android动画
    源码地址: https://download.csdn.net/download/dreams_deng/12236355 1. 理论知识 1.1 动画类型: View动画 :...
    99+
    2022-06-06
    Android
  • CSS动画属性有哪些
    CSS动画属性有以下几种:1. animation-name:指定一个关键帧动画的名称。2. animation-duration:...
    99+
    2023-10-12
    CSS
  • css动画属性怎么用
    这篇文章给大家分享的是有关css动画属性怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 transition(过渡)  使用语法:transition: property...
    99+
    2022-10-19
  • CSS3怎么用动画属性
    这篇文章主要为大家展示了“CSS3怎么用动画属性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS3怎么用动画属性”这篇文章吧。    ...
    99+
    2022-10-19
  • css3动画属性有哪些
    本篇内容主要讲解“css3动画属性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css3动画属性有哪些”吧! css3三大动画...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作