一、概述

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

1、  属性动画不仅仅能应用到View上,还可以应用到Object对象上。

2、  属性动画将会真正改变Object对象属性的值。

  如此强大的动画,我们没有理由不去学习使用,下面我们就根据API文档的介绍开始学习如何使用属性动画。

二、属性动画的学习与使用

  首先我们要先了解属性动画的一些关键属性,文档中给出了这么几个:

Duration:这个很好理解,动画的持续时间。

Time interpolation:时间差值,主要用来定义动画的变化率,系统中已经提供许多定义好的插值器,具体可以参照下表:

Repeat count and behavior:重复次数和模式,用于定义说明动画的重复次数及如何重复。

Animator sets:动画集合,用于组合动画,可以指定动画的执行顺序。

Frame refresh delay:刷帧延迟。

  了解了这些属性的意义后,我们在来看看与属性动画相关的类有哪些,从表中我们可以看到主要有3个,分别是ValueAnimator、ObjectAnimator、AnimatorSet,其中ObjectAnimator是ValueAnimator的子类。

  大多数情况下我们使用ObjectAnimator即可方便的完成非常不错的动画效果,下面让我们先体验一下。先上布局文件,非常简单,只有一张图片和一个按钮。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/imageView"
android:scaleType="fitXY"
android:src="@drawable/animator_img"
android:contentDescription="@null"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnOK"
android:text="OK"
android:layout_alignParentBottom="true"/>
</RelativeLayout>

  Java:

        findViewById(R.id.btnOK).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ObjectAnimator
.ofFloat(imageView, "translationX", 0f,300f)
.setDuration(2000)
.start();
}
});

  效果图如下:

  通过以上的演示,我们可以看到使用ObjectAnimator可以非常方便的完成一个动画,仅仅一行代码,同时通过Toast我们可以看出图片的位置属性确实是改变了。

  我们具体了解一下ObjectAnimator,ObjectAnimator提供了ofInt、ofFloat、ofObject等方法,这些方法中基本都需要如下参数:

Object target:动画作用的目标对象。

String propertyName:动画的作用属性,注意目标对象必须为此属性提供get/set方法。

Float/int…  values:可变参数,用于定义动画的起始、中间、结束时的数值。

  默认情况下,动画变化效果是线性,我们可以通过setInterpolator方法设置一个插值器来改变动画的变化率。

  AnimatorSet:用于组合动画 ,下面我们通过一个例子来演示它的具体用法,主要代码如下:

AnimatorSet animatorSet = new AnimatorSet();
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, "x", 0,screenWidth-imgWidth);
animator1.setDuration(2000);
animator1.setInterpolator(new DecelerateInterpolator()); ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageView, "y", 0,screenHeight-imgHeight);
animator2.setDuration(2000);
animator2.setInterpolator(new AccelerateInterpolator()); ObjectAnimator animator3 = ObjectAnimator.ofFloat(imageView, "x", screenWidth-imgWidth,0);
animator3.setDuration(2000);
animator3.setInterpolator(new AccelerateInterpolator()); ObjectAnimator animator4 = ObjectAnimator.ofFloat(imageView, "y", screenHeight-imgHeight,0);
animator4.setDuration(2000);
animator4.setInterpolator(new AccelerateInterpolator()); animatorSet.play(animator1);
animatorSet.play(animator2).after(animator1);
animatorSet.play(animator3).after(animator2);
animatorSet.play(animator4).after(animator3);
animatorSet.start();

  通过以上代码,我们可以看到通过AnimatorSet,我们可以任意组合动画,并且安排它们的执行顺序,图片在屏幕中按照顺时针方向走一周,并且因为插值器的使用,其变化率不一样,执行效果如下:

  看懂了吗?想要测试的小伙伴,可以点击下载工程直接运行测试!有问题也可以跟帖留言讨论哦~

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

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

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

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

  2. 【Android】属性动画

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

  3. Android之属性动画(二)

    上一篇文章(链接:http://www.cnblogs.com/jerehedu/p/4458928.html  ),我们对属性动画有了简单的认识,并实际动手使用ObjectAnimator.Anim ...

  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 ViewPager+属性动画 实现炫酷视差动画效果

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

  8. Android属性动画源代码解析(超详细)

    本文假定你已经对属性动画有了一定的了解,至少使用过属性动画.下面我们就从属性动画最简单的使用开始. ObjectAnimator .ofInt(target,propName,values[]) .s ...

  9. Android属性动画之ValueAnimation

    ValueAnimation是ObjectAnimation类的父类,经过前几天的介绍,相信大家对ObjectAnimation有了 一定的认识,今天就为大家最后介绍一下ValueAnimation, ...

随机推荐

  1. JAVAEE——宜立方商城03:商品类目选择、Nginx端口或域名区分虚拟机、Nginx反向代理、负载均衡、keepalived实现高可用

    1. 学习计划 第三天: 1.商品类目选择(EasyUI的tree实现) 2.图片上传 a) 图片服务器FastDFS(Nainx部分) 2. 商品类目选择 2.1. 原型 2.2. 功能分析 展示商 ...

  2. (四)静态断言(上),assert,NDEBUG, 以及通过宏定义处理文件包含关系

    一.断言:运行时与预处理时 断言(assertion)是一种编程常用的手段.想必大家都见过 assert 吧.今天我们就来了解一下它. 通常情况下,断言就是将一个返回值总是需要为真的判别式放在语句中, ...

  3. python io 模块之 open() 方法(好久没写博客了)

    io.open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True),打开file ...

  4. ASP.net jQuery调用webservice返回json数据的一些问题

    之前寒假时,试着使用jQuery写了几个异步请求demo, 但是那样是使用的webform普通页面,一般应该是用 webservice 居多. 最近写后台管理时,想用异步来实现一些信息的展示和修改, ...

  5. luoguP4555 [国家集训队]最长双回文串 manacher算法

    不算很难的一道题吧.... 很容易想到枚举断点,之后需要处理出以$i$为开头的最长回文串的长度和以$i$为结尾的最长回文串的长度 分别记为$L[i]$和$R[i]$ 由于求$R[i]$相当于把$L[i ...

  6. Linux提权exp大全

    如下表 #CVE #Description #Kernels CVE-2017-1000367 [Sudo] (Sudo 1.8.6p7 - 1.8.20) CVE-2017-7494 [Samba ...

  7. vijos p1883

    题意: 有些东西就如同月光的魔法一般. Luke是爱着vijos的.他想为自己心爱的东西画些什么. 就画N个圆吧.把它们的圆心都固定在x轴上. 圆与圆.为了爱,两两不能相交.为了爱,它们可以互相贴在一 ...

  8. Python168的学习笔记8

    #coding:utf8 #斐波那契数列,第三项起,每一项都等于前两项之和 def memo(func): cache = {}#闭包 def wrap(*args): if args not in ...

  9. tomcat-调整内存参数

    查看Tomcat的默认内存参数: <% /; /; /; out.println("max="+max); out.println("total="+to ...

  10. Shell脚本里的双冒号是什么意思

    这个是代码开发风格,其实也就是一个函数名,相当于下划线分割,但改读成包名之后就意义不一样.这个是根据Google的Shell开发规范进行定义的. 参考: https://google.github.i ...