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文件的名字。





  • 相关阅读:
    java基础部分的一些有意思的东西。
    antdvue按需加载插件babelpluginimport报错
    阿超的烦恼 javaScript篇
    .NET E F(Entity Framework)框架 DataBase First 和 Code First 简单用法。
    JQuery获得input ID相同但是type不同的方法
    gridview的删除,修改,数据绑定处理
    jgGrid数据格式
    Cannot read configuration file due to insufficient permissions
    Invoke action which type of result is JsonResult on controller from view using Ajax or geJSon
    Entity model数据库连接
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7186007.html
Copyright © 2011-2022 走看看