zoukankan      html  css  js  c++  java
  • android动画具体解释六 XML中定义动画

    动画View



    属性动画系统同意动画View对象并提供非常多比view动画系统更高级的功能。view动画系统通过改变绘制方式来变换View对象,view动画是被view容器所处理的,由于View本身没有要操控的属性。结果就是View被动画了。但View对象本身并没有变化。

    Android3.0中,新的属性和对应的gettersetter方法被增加以克服此缺点。

    属性动画系统能够通过改变View对象的真实属性来动画Views

    并且。View也会在其属性改变时自己主动调用invalidate()方法来刷新屏幕。View类中的能促进属性动画能力的的新属性有:

    • translationXtranslationY:这两个属性控制View的位置。它们是Viewlayout容器所设置的坐标位置的增量。

    • rotation,rotationX,rotationY:这些属性控制着在在2D(rotation属性)3D上的旋转。

    • scaleXscaleY:这些属性控制View2D缩放。

    • pivotXpivotY:这些属性控制着中心点的位置,旋转和缩放变化对是环绕它进行的。默认下。中心点在对象的中心位置。

    • xy:这些代表了Viewcontainer中的终于位置。它是lefttoptranslationXtranslationY的和。

    • alpha:代表了View的透明度。1(不透明)是默认值,0表示全然透明(看不见了)

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

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

    ViewPropertyAnimator进行动画

    ViewPropertyAnimator提供了一个同一时候动画某个View中的多个属性的简便方法,仅仅需使用一个Animator对象。它的行为非常像ObjectAnimator,由于它改动了真正的view属性,可是它对于同一时候动画多个属性更在行。另外。使用ViewPropertyAnimator的代码更加简洁易懂。以下的代码片段演示了当同一时候动画一个Viewxy属性时使用多个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中重用你的动画,并且能够更easy的改动动画顺序。

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

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

    以下的样例顺序的播放两个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设置单个对象非常easy。以下的代码演示了怎样做:

    AnimatorSetset = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    
    R.anim.property_animator);
    
    set.setTarget(myObject);
    
    set.start();
    

    property_animatorXML文件的名字。





  • 相关阅读:
    输入一个nxn矩阵各元素的值,球出两条对角线元素之和
    打印杨辉三角
    编写一个函数,实现两个字符串的连接功能
    字符串置换。将字符串s中的出现的字符s1用字符s2置换
    有一行文字,要求删去其中某个字符
    自定义函数delstr()的功能是删去字符串s1中所有的"*"
    用微软的kestrel在Linux上利用Apache架设Asp.Net Core环境
    2012年8月14日 星期二 equals()方法 (冲突备份)
    jquery 操作DOM 案例
    FileUpload 控件上传图片和文件
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7186007.html
Copyright © 2011-2022 走看看