上一篇文章(链接:http://www.cnblogs.com/jerehedu/p/4458928.html  ),我们对属性动画有了简单的认识,并实际动手使用ObjectAnimator、AnimatorSet完了一个简单的例子,本次继续对剩余内容进行学习。

  首先让我们先来了解一下动画是如何计算的呢?从官方文档上我们可以看到下面这张图:

  图中描述了动画过程中相互工作的主要类,其中ValueAnimator对象可以记录动画时间轨迹。ValueAnimator中含有一个TimeInterpo;ator,此属性用于描述动画的时间插值;含有一个TypeEvaluator,此属性用于指定动画属性值是如何被计算出来的。

  创建一个ValueAnimator并启动动画后,ValueAnimator在动画运行期间会计算一个0到1的分数,这个分数用于表示整个动画运行的百分比。当ValueAnimator计算好一个运行分数后,会调用当前设置的TimeInterpolator去计算插值分数;插值分数计算好后,ValueAnimator调用TypeEvaluator根据插值分数计算属性的值。

  这里的ValueAnmiator就是我们在上一章中使用的ObjectAnimator的父类,需要注意的是ValueAnimator不会直接操作一个对象或者属性,也就意味着我们如果想使用ValueAnimator完成动画,就必须为ValueAnimator添加一个监听器:

                ValueAnimator animator = ValueAnimator.ofFloat(0.0f, 360f);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//当前动画进度
float curValue = (Float) animation.getAnimatedValue();
imageView.setRotationX(curValue);
}
});
animator.setDuration(4000);
animator.setInterpolator(new DecelerateInterpolator());
animator.start();

  效果图:

  当ValueAnimator的ofInt、ofFloat不能满足需求是,我们可以使用ofObject方法,这时候需要继承TypeEvaluaot<T>自定义即可。

  除了AnimatorUpdateListener之外,属性动画框架为我们提供了Animator.AnimatorListener监听器:

  Android提供了一个此监听器的默认实现AnimatorListenerAdapter,我们只需要继承此类即可,参考代码如下:

animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
PropertyValuesHolder holderX =PropertyValuesHolder.ofFloat("translationX",0f,260f);
PropertyValuesHolder holderY=PropertyValuesHolder.ofFloat("translationY",0f,260f);
ObjectAnimator.ofPropertyValuesHolder(imageView,holderX,holderY)
.setDuration(4000)
.start();
}
});

  属性动画中常用的属性有:

TranslationX、TranslatioinY:相对于布局容器的左边和上边的坐标值

Rotation、rotationX、rotationY:旋转属性

scalX、scalY:缩放属性

pivotX、pivotY:设置旋转、缩放时的中心点

x、y:坐标

alpha:透明度

  和view动画一样,除了使用java代码完成动画外,我们同样可以使用xml文档来编写属性动画。要注意的是xml文件的目录不再是anim,而是要在res下新建一个animator文件夹用于存放。

  Xml代码如下:

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">
<set android:ordering="together">
<objectAnimator android:propertyName="translationX"
android:valueFrom="0"
android:valueTo="260"
android:duration="2000"
android:valueType="floatType"/>
<objectAnimator android:propertyName="translationY"
android:valueFrom="0"
android:valueTo="260"
android:valueType="floatType"
android:duration="2000"/>
</set>
<objectAnimator
android:propertyName="alpha"
android:valueFrom="1"
android:valueTo="0"
android:duration="2000"/>
</set>

  在java中使用:

AnimatorSet animatorSet = (AnimatorSet)AnimatorInflater.loadAnimator(this,R.animator.myanimator);
animatorSet.setTarget(imageView);
animatorSet.start();

  想要深入学习的同学,可以点击下载源码,查看更多详细内容!

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 

Android之属性动画(二)的更多相关文章

  1. Android之属性动画(一)

    一.概述 Android平台中常用的动画主要有两类,一类是View动画,一类是3.0后新增的属性动画.属性动画与View动画相比功能更加强大,主要体现在以下两个方面: 1.  属性动画不仅仅能应用到V ...

  2. android使用属性动画代替补间动画

    本文参考Android属性动画完全解析(上),初识属性动画的基本用法 android3.0之前一共有两种动画,分别是frame动画和tween动画,关于这两种动画如果不了解可以查看我之前的文章andr ...

  3. 【Android】属性动画

    转载请注明出处:http://blog.csdn.net/h28496/44338669 属性动画的原理 通过不断的设置一个View的属性让其出现动画效果.比如,不断地设置一个Button的x值.这个 ...

  4. Android使用属性动画ValueAnimator动态改变SurfaceView的背景颜色

    以下是主要代码,难点和疑问点都写在注释中: /** * 开始背景动画(此处为属性动画) */ private void startBackgroundAnimator(){ /* *参数解释: *ta ...

  5. Android开发属性动画

    普通动画效果和属性动画效果区别: 普通动画效果的动画播放后只是产生了视觉欺骗,并没有移动真实的控件. 属性动画直接真实的移动控件 AnimationSet动画: TextView t1 = (Text ...

  6. Android 用属性动画自定义view的渐变背景

    自定义view渐变背景,同时监听手势自动生成小圆球. 宿主Activity如下: package com.edaixi.tempbak; import java.util.ArrayList; imp ...

  7. (原)android中的动画(二)

    帧动画的使用需要在xml文件中指定每一帧所对应的图片 animation-list写法如下: <?xml version="1.0" encoding="utf-8 ...

  8. Android ViewPager+属性动画 实现炫酷视差动画效果

    ViewPager有一个setPageTransform()方法可以实现很多酷炫的动画效果 先来个仿QQ的侧滑面板效果 vp.setPageTransformer(true, new PageTran ...

  9. Android至ViewPager添加切换动画——使用属性动画

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/44200623 ViewPager作为Android最经常使用的的组件之中的一个.相 ...

随机推荐

  1. maven 发布jar包到远程仓库

    有的时候我们需要发布一些自己写的相关jar包到maven私服,供项目组使用. 首先在setting.xml文件添加,这里 注意 要保证该账户有发布的权限 <servers> <ser ...

  2. Vue图片懒加载插件

    图片懒加载是一个很常用的功能,特别是一些电商平台,这对性能优化至关重要.今天就用vue来实现一个图片懒加载的插件. 这篇博客采用"三步走"战略--Vue.use().Vue.dir ...

  3. ActiveMQ (三):项目实践

    1. 简单项目demo Com.hoo.mq路径下(除了com.hoo.mq.spring)是普通java中使用activeMQ. Com.hoo.mq.spring路径下是非web环境spring集 ...

  4. 1012 The Best Rank (25)(25 point(s))

    problem To evaluate the performance of our first year CS majored students, we consider their grades ...

  5. 机器学习之路: python 实践 word2vec 词向量技术

    git: https://github.com/linyi0604/MachineLearning 词向量技术 Word2Vec 每个连续词汇片段都会对后面有一定制约 称为上下文context 找到句 ...

  6. CXF发布webservice

    http://wenku.baidu.com/link?url=dTJpXcL0TXslGAYYC6SSOrPGvjyEb974ZGx9-0dymU32YDjxuP8DwlI1sFpPCGqu_ywW ...

  7. [CodeChef-QTREE6]Query on a tree VI

    题目大意: 给你一棵黑白树,每个点默认是白色,要求支持以下两种操作: 1.改变一个点的颜色: 2.除去连接不同颜色的点的边,求某个点连通块的大小. 思路: 对原树维护两个树链剖分, 一棵维护当点x为白 ...

  8. vijos p1882 智力题

    题意: 清晨, Alice与Bob在石阶上玩砖块.他们每人都有属于自己的一堆砖块.每人的砖块都由N列组成且N是奇数.Alice的第i列砖块有m[i]个.而Bob的第i列砖块有s[i]个. 他们想建造城 ...

  9. 细说React(二)

    上篇文章主要介绍了React的基本用法,这次将介绍一个React路由组件—react-router. 在 web 应用开发中,路由系统是不可或缺的一部分.在浏览器当前的 URL 发生变化时,路由系统会 ...

  10. tyvj 1044 数字三角形 记忆化搜索

    数字三角形 Time Limit: 1 Sec  Memory Limit: 162 MB 题目连接 http://www.tyvj.cn/p/1044 Description 示出了一个数字三角形. ...