android动画详解六 XML中定义动画

动画View

属性动画系统允许动画View对象并提供很多比view动画系统更高级的功能。view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,因为View本身没有要操控的属性。结果就是View被动画了,但View对象本身并没有变化。在Android3.0中,新的属性和相应的getter和setter方法被加入以克服此缺点。

属性动画系统可以通过改变View对象的真实属性来动画Views。而且,View也会在其属性改变时自动调用invalidate()方法来刷新屏幕。View类中的能促进属性动画能力的的新属性有:

  • translationX和translationY:这两个属性控制View的位置,它们是View被layout容器所设置的坐标位置的增量。
  • rotation,rotationX,和rotationY:这些属性控制着在在2D(rotation属性)和3D上的旋转。
  • scaleX和scaleY:这些属性控制View的2D缩放。
  • pivotX和pivotY:这些属性控制着中心点的位置,旋转和缩放变化对是围绕它进行的。默认下,中心点在对象的中心位置。
  • x和y:这些代表了View在container中的最终位置,它是left和top与translationX和translationY的和。
  • alpha:代表了View的透明度。1(不透明)是默认值,0表示完全透明(看不见了)。

要动画一个View对象的属性,比如它的颜色或旋转值,你所有需要做的就是创建一个属性animator 然后指定你想动画的View属性。例如:

ObjectAnimator.ofFloat(myView,"rotation", 0f, 360f);

用ViewPropertyAnimator进行动画

ViewPropertyAnimator提供了一个同时动画某个View中的多个属性的简便方法,只需使用一个Animator对象。它的行为很像ObjectAnimator,因为它修改了真正的view属性,但是它对于同时动画多个属性更在行。另外,使用ViewPropertyAnimator的代码更加简洁易懂。下面的代码片段演示了当同时动画一个View的x和y属性时使用多个ObjectAnimator对象、单个ObjectAnimator、和ViewPropertyAnimator的不同。

多个ObjectAnimator 对象

ObjectAnimatoranimX = ObjectAnimator.ofFloat(myView, "x", 50f);

ObjectAnimatoranimY = ObjectAnimator.ofFloat(myView, "y", 100f);

AnimatorSetanimSetXY = new AnimatorSet();

animSetXY.playTogether(animX,animY);

animSetXY.start();

一个ObjectAnimator

PropertyValuesHolderpvhX = PropertyValuesHolder.ofFloat("x", 50f);

PropertyValuesHolderpvhY = PropertyValuesHolder.ofFloat("y", 100f);

ObjectAnimator.ofPropertyValuesHolder(myView,pvhX, pvyY).start();

ViewPropertyAnimator

myView.animate().x(50f).y(100f);

在XML中声明动画

属性动画系统使你能够使用XML声明属性动画而不用写代码。通过在XML中定义动画,你可以轻易的在多个activity中重用你的动画,并且可以更容易的修改动画顺序。

为了区分使用了新的属性动画API和使用了旧的view动画框架的文件,从Android3.1开始,你应该将属性动画XML文件保存到res/animator/文件夹下(而不是res/anim/)。使用animator时,其文件夹的名字是可选的,但是当你要使用EclipseADT plugin (ADT 11.0.0+)中的layout编辑工具时就是必须的了,因为ADT只去res/animator/文件夹下搜寻属性动画资源。

下面的属性动画类具有支持XML中声明的能力:

  • ValueAnimator- <animator>
  • ObjectAnimator- <objectAnimator>
  • AnimatorSet- <set>

下面的例子顺序的播放两个objectanimation动画的集合,第一个也是一个set,这个子set同时播放两个objectanimation:

<setandroid:ordering="sequentially">

<set>

<objectAnimator

android:propertyName="x"

android:duration="500"

android:valueTo="400"

android:valueType="intType"/>

<objectAnimator

android:propertyName="y"

android:duration="500"

android:valueTo="300"

android:valueType="intType"/>

</set>

<objectAnimator

android:propertyName="alpha"

android:duration="500"

android:valueTo="1f"/>

</set>

要播放此动画,你必须在你的代码中inflateXML 资源成一个AnimatorSet对象,然后设置所有动画的目标对象,再开始动画。调用setTarget()为所有的子集AnimatorSet设置单个对象很简单。下面的代码演示了如何做:

AnimatorSetset = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,

R.anim.property_animator);

set.setTarget(myObject);

set.start();

property_animator是XML文件的名字。

上一篇:android动画详解五 layout,插值与评估器

时间: 2024-07-30 03:07:09

android动画详解六 XML中定义动画的相关文章

android动画具体解释六 XML中定义动画

动画View 属性动画系统同意动画View对象并提供非常多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,由于View本身没有要操控的属性.结果就是View被动画了.但View对象本身并没有变化. 在Android3.0中,新的属性和对应的getter和setter方法被增加以克服此缺点. 属性动画系统能够通过改变View对象的真实属性来动画Views. 并且.View也会在其属性改变时自己主动调用invalidate(

Animation动画详解(六)——ValueAnimator高级进阶(二)

前言:人生总有不平时,无论何时,不后悔就好. 相关文章: 1.<Animation 动画详解(一)--alpha.scale.translate.rotate.set的xml属性及用法>2.<Animation动画详解(二)--Interpolator插值器>3.<Animation动画详解(三)-- 代码生成alpha.scale.translate.rotate.set及插值器动画>4.<Animation动画详解(四)--ValueAnimator基本使用&

XML中定义动画 快速上手

存放位置 补间动画的xml文件是放在res/anim文件夹中的 帧动画中的xml文件是放在res/drawable文件夹中,不过也可以放置在res/anim/中属性动画的xml文件是放在res/animator文件夹中,不过也可以放置在res/anim/中 帧动画 <animation-list xmlns:android="http://schemas.android.com/apk/res/android"     android:oneshot="true&quo

Android Fragment详解(六):Fragement示例

把条目添加到动作栏 你的fragment们可以向activity的菜单(按Manu键时出现的东西)添加项,同时也可向动作栏(界面中顶部的那个区域)添加条目,这都需通过实现方法onCreateOptionManu()来完成. 你从fragment添加到菜单的任何条目,都会出现在现有菜单项之后.Fragment之后可以通过方法onOptionsItemSelected()来响应自己的菜单项被选择的事件. 你也可以在fragemnt中注册一个view来提供快捷菜单(上下文菜单).当用户要打开快捷菜单时

[数据库事务与锁]详解六: MySQL中的共享锁与排他锁

注明: 本文转载自http://www.hollischuang.com/archives/923 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念.使用方式及注意事项等. 共享锁(Share Lock) 共享锁又称读锁,是读取操作创建的锁.其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁. 如果事务T对数

Animation动画详解(十一)——layoutAnimation与gridLayoutAnimation

前言:人或许天生是懒惰的,明知道的不足,却不努力弥补. 相关博客: 1.<Animation 动画详解(一)--alpha.scale.translate.rotate.set的xml属性及用法> 2.<Animation动画详解(二)--Interpolator插值器> 3.<Animation动画详解(三)-- 代码生成alpha.scale.translate.rotate.set及插值器动画> 4.<Animation动画详解(四)--ValueAnima

【转】Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)>>中,我们 了解了View树的转换过程以及如何设置View的LayoutParams的.本文继续沿着既定轨迹继续未完成的job. 主要知识点如下:                 1.MeasureSpc类说明                 2.measure过程详解(揭秘其细节);   

Android Animation动画详解(二): 组合动画特效

前言 上一篇博客Android Animation动画详解(一): 补间动画 我已经为大家介绍了Android补间动画的四种形式,相信读过该博客的兄弟们一起都了解了.如果你还不了解,那点链接过去研读一番,然后再过来跟着我一起学习如何把简单的动画效果组合在一起,做出比较酷炫的动画特效吧. 一. 动画的续播 如题,大家想想,如果一个页面上包含了许多动画,这些动画要求按顺序播放,即一个动画播放完成后,继续播放另一个动画,使得这些动画具有连贯性.那该如何实现呢? 有开发经验或者是逻辑思维的人肯定会想,对

android动画详解三 动画API概述

· 属性动画与view动画的不同之处 view动画系统提供了仅动画View 对象的能力,所以如果你想动画非View 对象,你就要自己实现代码. view动画系统实际上还被强制仅能对 View 的少数属性进行动画,比如缩放和旋转,而不能对背景色进行. view动画的另一个坏处是它仅修改View的绘制位置,而不是View的实际位置.例如,如果你动画一个移动穿越屏幕,button的绘制位置是正确的,但实际你可以点击它的位置却没有变,所以你必须去实现你自己的逻辑来处理它. 使用属性动画系统时,这个限制被