Android属性动画之ValueAnimator的介绍
之前两篇博客,介绍的是ObjectAnimator作用与某一个控件的某一个属性。但我们的ValueAnimator它本身并不会作用与任何一个属性,它本身也不会提供任何一种动画。它简单的来说,就是一个数值发生器,它可以产生你想要的各种数值。其实,在Android属性动画中,如何产生每一步具体实现动画效果,都是通过ValueAnimator计算出来的。
比如我们现在要实现一个从0~100的位移动画,ValueAnimator会根据动画持续的总时间产生一个0~1时间因子,有了这样一个时间因子。通过相应的变幻,就可以根据你的startValue和endValue来生成相应的值。同时,通过插值器的使用,我们还可以进一步控制每一个时间因子它产生值的一个变化速率。如果我们使用线性插值器,那么它生成数值的时候,就会形成一个线性变化,只要时间相同,它的增量也相同。如果我们使用一个加速度的插值器,那么它的增量变化就会呈现一个二次曲线图。增长率会越来越快。由于我们的ValueAnimator并不响应任何一个动画,也不能控制任何一个属性,所以它并没有ObjectAnimator使用的那么广泛。我们还是来看一下如何在程序中使用ValueAnimator吧。
这里贴一个计时器的动画Demo,activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.valueanimatordemo.MainActivity"> <Button
android:id="@+id/btn_click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Click Me" /> </RelativeLayout>
然后是Java代码的实现,MainActivity.java:
package com.example.administrator.valueanimatordemo; import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.graphics.PointF;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_click; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView() {
btn_click = (Button) findViewById(R.id.btn_click);
btn_click.setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_click:
// startAnimator1();//计时器实现 //除了startAnimator1()方法中用的ValueAnimator.ofInt(),我们还有
//ofFloat()、ofObject()这些生成器的方法;
//我们可以通过ofObject()去实现自定义的数值生成器(请看startAnimator2()方法)
startAnimator2();
break;
}
} private void startAnimator1() {
final ValueAnimator animator = ValueAnimator.ofInt(0, 100);
animator.setDuration(5000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
/**
* 通过这样一个监听事件,我们就可以获取
* 到ValueAnimator每一步所产生的值。
*
* 通过调用getAnimatedValue()获取到每个时间因子所产生的Value。
* */
Integer value = (Integer) animation.getAnimatedValue();
btn_click.setText(value + "");
}
});
animator.start();
} private void startAnimator2() {
ValueAnimator animator = ValueAnimator.ofObject(new TypeEvaluator<PointF>() {
@Override
public PointF evaluate(float fraction, PointF startValue, PointF endValue) {
return null;
}
});
}
}
在startAnimator2()方法中,我们既然是生成我们自定义的数值,那就需要new 出TypeEvaluator,并且通过泛型指定我们自定义数值的类型(Demo中暂且为PointF)。通过重写了evaluate这样一个方法,我们可以返回各种各样的值,它的第一个参数fraction就是前面说到的时间因子,它是一个从0~1之间变化的一个数值。还有startValue参数和endValue参数,这些参数结合起来通过各种各样的计算方式,就可以产生所有我们想要产生的值。这里不光能产生普通的数据结构,通过泛型同样可以定义更加复杂的数据结构。
比如这里用的泛型是PointF,通过重写的evaluate方法,来给我们的Point增加各种各样的计算方式。我们可以修改Point的各种坐标来完成后续的处理。所以,ValueAnimator的功能十分强大,而且很灵活。它可以实现很多意向不到的效果。不仅仅可以使用在动画中,在Android中的很多地方都可以使用。
总结:
1、常用属性:
translationX\translationY 水平和垂直方向偏移
rotation、rotationX\rotationY rotation指3D翻转,rotationX\rotationY指水平和竖直方向的一个旋转动画
scaleX\scaleY X轴方向,和Y轴方向缩放的一个动画
X\Y 具体会移动到某一个点
alpha 透明度动画
2、常用的方法、类
ValueAnimator 数值发生器
ObjectAnimator 是ValueAnimator的一个子类,它封装了ValueAnimator,可以更轻松的使用属性动画
AnimatorUpdateListener
AnimatorListenerAdapter 这2个是用来做监听事件的
PropertyValuesHolder
AnimatorSet 这2个用来控制集合动画的一个显示效果、顺序
TypeEvaluators 值计算器
Interpolators 插值器,用来控制具体数值的变化规律

Android属性动画之ValueAnimator的介绍的更多相关文章
- android属性动画之ValueAnimator
楼主前段时间做一个android项目,其中一个需求是需要制作一个动画,但是之前楼主没接触过android动画,所以在网上搜了下,并且也有人推荐可以试下用属性动画,所以我就百度了下属性动画怎么用,并顺便 ...
- 详解Android属性动画
前面我们讲到的属性动画都是使用代码的定义方式:Android属性动画之ValueAnimator和Android属性动画之ObjectAnimator和AnimatorSet,下面我们再来看看使用XM ...
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法 ...
- Android属性动画之ValueAnimation
ValueAnimation是ObjectAnimation类的父类,经过前几天的介绍,相信大家对ObjectAnimation有了 一定的认识,今天就为大家最后介绍一下ValueAnimation, ...
- Android属性动画完全解析(上),初识属性动画的基本用法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系 ...
- Android属性动画完全解析(中)
转载:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是 ...
- Android属性动画完全解析(上)
Android属性动画完全解析(上) 转载:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷 ...
- Android 属性动画 源码解析 深入了解其内部实现
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42056859,本文出自:[张鸿洋的博客] 我参加了博客之星评选,如果你喜欢我的博 ...
- Android属性动画-基本用法
在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(twe ...
随机推荐
- nmap扫描工具
1.NMap工具 主要功能:探测主机是否在线.扫描主机开放端口和嗅探网络服务,用于网络探测和安全扫描. NMap支持很多扫描技术,例如:UDP.TCPconnect().TCPSYN(半开扫描).ft ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 解析JSON
视频地址:https://www.cctalk.com/v/15114923886141 JSON 数据 我颠倒了整个世界,只为摆正你的倒影. 前面的文章中,我们已经完成了项目中常见的问题,比如 路由 ...
- 吴裕雄 数据挖掘与分析案例实战(2)——python数据结构及方法、控制流、字符串处理、自定义函数
list1 = ['张三','男',33,'江苏','硕士','已婚',['身高178','体重72']]# 取出第一个元素print(list1[0])# 取出第四个元素print(list1[3] ...
- nfs只能挂载为nobody的解决方法
不得不承认centos6较centos5发生了很大的变化,在新部署的centos 6.4上又遇到nfs挂载的问题.问题现象是,在配置完nfs后,无论配置里指定的是何用户,挂载成功后显示的只能是nobo ...
- 部分2020年交期的PR回写到SAP中
描述:此问题一直存在,只是用户没有发现,最近提出,部分2020年交期的PR回写到SAP中 优化: SELECT MAX (PR.ORDERID), PR.ITEM, SUBSTR (PR.RECOMM ...
- 求含有n个因子的最小正整数(n<=1000000)
题目链接:https://ac.nowcoder.com/acm/contest/331/G 思路: 根据唯一分解定理,如果一个数n可以表示成 n=p1a1*p2a2*...*pkak (pi是第i个 ...
- Redis网络协议
Redis网络协议较为简单,易于阅读. 命令或数据已\r\n结尾,但除了状态回复,其他数据都是二进制安全的(包含长度) 头部如下: + 正确的状态信息,具体信息是当前行+后面的字符. - 一条错误信 ...
- python之socket运用之传输大文件
socket建议最大的传输单元是8192个字符,但是如果超过8192就会出现问题,我们可以用下面的方法处理 客户端代码 import subprocess import socket ip_bind ...
- 二叉树的最大/小/平衡 深度 depth of binary tree
[抄题]: 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的距离. [思维问题]: [一句话思路]: 分合法的定义 [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况 ...
- vc通过webbrowser操作ie元素
1>需要引用 webbrowser2.h,mshtml.h //m_web绑定的webbrowser的变量 CComQIPtr<IHTMLDocument2,&IID_IHTMLD ...