iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android 属性动画:一文让你彻底了解和掌握属性动画用法
  • 707
分享到

Android 属性动画:一文让你彻底了解和掌握属性动画用法

属性动画Android 2022-06-06 14:06:19 707人浏览 薄情痞子
摘要

本文目录属性动画概述属性动画用法对象动画(ObjectAnimator)方法1:Java代码实现对象动画方法2:XML实现对象动画值动画(Val

本文目录属性动画概述属性动画用法对象动画(ObjectAnimator)方法1:Java代码实现对象动画方法2:XML实现对象动画值动画(ValueAnimator)PropertyValueHolder动画组合(AnimatorSet)差值器(Interpolator)估值器(TypeEvaluator)

在这里插入图片描述

属性动画概述

前面给我们分析了

Android
中的
帧动画
补间动画
的特点和用法
Android动画之补间动画用法最全详解
Android 动画之帧动画用法详解

Android
官方在
Anrdoid 3.0
以后又推出了一种新的动画即
属性动画
,既然前面的
帧动画
补间动画
能帮助我们实现大部分的Android动画效果,那么官方为什么还要推出这种新的
属性动画
呢?

原因1:

补间动画
作用的对象是
View
,也就是作用的对象是
Android
中的控件,如
ImageView
Button
TextView
等,也可以作用在布局上如
LinearLayout
ConstraintLayout
RelativeLayout
等,但是对于一些不是
View
的对象,无法对这些对象进行动画操作。比如我们要对某个控件的某个属性做进行动画操作,如其颜色,这个颜色也可以看成一个对象,但其并不是
View
对象,
补间动画
就无法实现,
属性动画
可以对这个颜色值做动画, 能实现一些更加复杂的动画效果。

原因2:

补间动画只是改变了

View
的视觉效果,而不会真正去改变View的属性
在这里插入图片描述
比如我们对一个图片进行
AlphaAnimation
,并在动画前后打印其值

Log.i("MainActivity","动画开始前mImageView alpha="+mImageView.getAlpha());
animation = new AlphaAnimation(0, 1);
animation.setDuration(2000);
mImageView.startAnimation(animation);
Log.i("MainActivity","动画结束后mImageView alpha="+mImageView.getAlpha());

在这里插入图片描述
从打印的结果可以看出,

补间动画
并没有改变
View
的属性值,而
属性动画
不但会帮助我们实现
View
动画的一些视觉效果,而且还能改变
View
的属性值。

属性动画用法

1、属性动画都是通过

ValueAnimator
类和
ObjectAnimator
类来完成,其中
ObjectAnimator
类是对对象做动画,
ValueAnimator
类是对值做动画。
2、
PropertyValueHolder类
可以同时执行多个动画,
AnimatorSet
l类可以将多个动画按一定的秩序先后执行。
3、
TypeEvaluator
估值器和
Interpolator
差值器

我们了解了下面6个类的基本用法,就基本彻底掌握了属性动画

ObjectAnimator 对象动画 ValueAnimator 值动画 PropertyValueHolder 用于同时执行多个动画 TypeEvaluator 估值器 AnimatorSet 动画集合 Interpolator 差值器 对象动画(ObjectAnimator)

ObjectAnimator
类是属性动画中非常重要的一个类,可以通过该类对
View
不仅可以实现一些基本的移、旋转、缩放和透明度四种基本变换动画,还能实现一些其他属性值的变换动画。
实现方式既可以通过Java代码,也可以通过XML方式来实现,下面我们来分别介绍下两种方式基本用法。

方法1:Java代码实现对象动画

首先我们先来看一下

ObjectAnimator
类最基本的方法

 public static ObjectAnimator ofFloat(Object target, String propertyName, float... values) {
        ObjectAnimator anim = new ObjectAnimator(target, propertyName);
        anim.setFloatValues(values);
        return anim;
    }

方法中第一个参数

Object target
的作用对象通常是
View
,也就是Android中的控件或布局。
方法中第二个参数
String propertyName
通常是需要执行动画的属性,具体值如下表所示

属性 值的用法
rotation 以屏幕方向为轴的旋转度数
alpha 透明度
translationX / translationY X/Y方向的位移
scaleX /scaleY X/Y方向的缩放倍数
rotationX / rotationY 以X/Y轴为轴的旋转度数

方法中第三个参数

float... values
表示属性的变换范围,该参数可以传多个值。

添加一些代码来看一下效果

ImageView imageView = findViewById(R.id.imageView);
ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0f, 1f);
animator.setDuration(5000);
animator.start();

该动画效果表示控件

ImageView
的透明度在
5s
内由
1
变换到
0
,再由
0
变回
1
。效果如下:
在这里插入图片描述
ObjectAnimator
的其他方法使用如下:

 ImageView imageView = findViewById(R.id.imageView);
 ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0f, 1f);
 animator.setDuration(2000);
 //动画延迟500ms执行
 animator.setStartDelay(500);
 //执行重复次数 +1
 animator.setRepeatCount(3);
 // 设置动画重复播放模式 RESTART -执行完一遍后重新执行
 // REVERSE -执行完一遍后 从末位置往前执行
 animator.setRepeatMode(ValueAnimator.RESTART);
 //监听值变换
 animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
     @Override
     public void onAnimationUpdate(ValueAnimator animation) {
         Log.i("MainActivity","value:" +animation.getAnimatedValue());
     }
 });
 animator.start();

运行效果:
在这里插入图片描述

onAnimationUpdate
回调方法的部分值打印如下

Java代码中通过加载该xml启动动画

ImageView imageView = findViewById(R.id.imageView);
Animator animator = AnimatorInflater.loadAnimator(Main2Activity.this, R.animator.animator_alpha);
animator.setTarget(imageView);
animator.start();
值动画(ValueAnimator)

值动画通过控制值的变化,之后 手动赋值给对象的属性,从而实现动画。

ValueAnimator
的核心方法如下

ValueAnimator ofFloat(float... values) -- 浮点型数值
ValueAnimator  ofInt(int... values) -- 整型数值
ValueAnimator  ofObject(TypeEvaluator evaluator, Object... values) -- 自定义对象类型

下面我们来添加值动画,在值动画的监听函数里 来获取值得变化,根据值的变化对控件设置相应的属性。这里的属性可以是控件的任意属性

 final ImageView imageView = findViewById(R.id.imageView);
 ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
 anim.setDuration(5000);
 anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
     @Override
     public void onAnimationUpdate(ValueAnimator animation) {
         float currentValue = (float) animation.getAnimatedValue();
         Log.d("MainActivity", "cuurent value is " + currentValue);
         imageView.setAlpha(currentValue);
     }
 });
 anim.start();

效果如下
在这里插入图片描述
从下面的打印结果中也可以看出,值动画返回了一系列值。

将在估值器加到动画中,该动画作用在我们自定义的View上

MyView imageView = findViewById(R.id.myview);
ObjectAnimator anim = ObjectAnimator.ofObject(
        imageView,"color", new MyTypeEvaluator(),
        "#0000FF","#FF0000");
anim.setDuration(5000);
anim.start();

效果如下:
在这里插入图片描述

huwei0814 原创文章 28获赞 113访问量 1万+ 关注 私信 展开阅读全文
作者:huwei0814


--结束END--

本文标题: Android 属性动画:一文让你彻底了解和掌握属性动画用法

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

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

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

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

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作