Android开发之Animation Resources(动画资源)

首先附上谷歌官方文档链接地址

    在Android中,一个动画资源可由两种形式的动画之一确定:属性动画(Property Animation)和视图动画(View Animation);
视图动画又包含了两种形式的动画:帧动画(Frame animation)和补间动画(Tween animation).
    In this document
        Property Animation
        View Animation
            Tween animation
            Frame animation

一、帧动画(Frame animation)

先来看看谷歌的官方定义:An animation defined in XML that shows a sequence of images in order (like a film).(在XML文件中定义的用于按次序播放一系列图片(类似于电影)的动画)。显然这是一个传统动画,它创建一个个不同的图像序列并有序的播放,类似于早期动画片的原理。
  帧动画可以定义在XML中并在代码中实现,如果我们要在XML中定义帧动画,需在res/drawable/filename.xml文件下,文件名会被用作资源ID;如果完全由代码实现的话,就要用到AnimationDrawable对象。

resource reference:
    In Java: R.drawable.filename
    In XML: @[package:]drawable.filename

将动画定义在XML中官方给出的语法规范示例:

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot=["true" | "false"] >
        <item
            android:drawable="@[package:]drawable/drawable_resource_name"
            android:duration="integer" />
    </animation-list>

元素及必要属性:

    <animation-list>元素:
        必要元素,包含一个或多个<item>元素。
        包含属性:
        android:oneshot
            boolean值,“true”表示播放动画一次,“false”表示循环播放动画。
    <item>元素:
        一帧动画,必须是<animation-list>元素的子元素。
        包含属性:
        android:drawable
            图片资源,表示这一帧代表的图片
        android:duration
            整形值,表示展示这一帧的的时间,以毫秒为单位。

然后官方给出了示例代码:

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">
        <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
        <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
        <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
    </animation-list>

上面帧动画中共有三张图片,每张停留200毫秒并且循环播放。我们在代码中会将上述动画设置为背景视图,现在我们在代码中播放上述动画:

    ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
    rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

    rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
    rocketAnimation.start();

OK,关于帧动画的部分基本介绍完了,相对比较简单,上面基本是翻译的官方文档。
  另外需要注意的一点是:如果我们将rocketAnimation.start();放在Activity的onCreate()函数中,在低版本的安卓设备上(4X以下)可能会出现问题(如动画会停留在第一帧等)因为AnimationDrawable的start方法时,窗口Window对象还没有完全初始化,AnimationDrawable不能完全追加到窗口Window对象中,官网给出的建议是在Activity的onWindowFocusChanged方法(如果对此方法不熟可以看此博客http://blog.csdn.net/dmk877/article/details/45059261)中去掉用AnimationDrawable.start()方法,因为onWindowFocusChanged在Activity窗口获得或失去焦点时调用,例如创建时首次展示在用户面前,所以在调用onWindowFocusChanged方法时窗口已经初始化完全了。当然如果不适配那么低的版本的设备的话我们可以不必考虑这个问题。(这段参考自博客http://blog.csdn.net/dmk877/article/details/45893017)。

二、补间动画(Tween animation)

我们先来看看官方对于补间动画的定义:

    Creates an animation by performing a series of transformations on a single image with an Animation(通过对单张图片执行一系列的转变来创造一个动画)
    An animation defined in XML that performs transitions such as rotating, fading, moving, and stretching on a graphic(一个定义在XML文件中,通过执行诸如旋转,淡变(透明度),移动和图形拉伸创造的动画)

    同样文件位置在**res/anim/filename.xml**中,
    resource reference:
        In Java: R.anim.filename
        In XML: @[package:]anim/filename

语法规范:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

    上述代码块可以看出,补间动画分为四类:alpha(渐变)、scale(缩放)、translate(位移)、rotate(旋转),这四种动画既有他独有的属性同时又有animation类的通用属性。
    The file must have a single root element: either an <alpha>, <scale>, <translate>, <rotate>, 
or <set> element that holds a group (or groups) of other animation elements (even nested <set> elements).
此文件必须含有alpha,scale,translate或者rotate中的一个根元素,或者含有一个包含了一组或者更多组的其他动画元素(甚至是嵌套的<set>元素)。

从Animation类继承的共有属性 :

android:duration:动画执行的时间,以毫秒为单位
android:fillEnabled:true|false,true:动画结束时还原到开始动画前的状态
android:fillBefore:如果fillEnabled的值为true,它的值才有意义,否则没有意义默认值是true,视图会停留在动画开始的状态
android:fillAfter:设置的是在这个动画结束后是否保留这个动画的最后一帧的效果填充后面的动画,它的设置不受fillEnabled的影响
android:repeatMode:reverse|restart,重复类型,reverse:表示倒序回访,restart:表示重新放一遍,这个属性必须与repeatCount联合使用,因为它的前提是重复,即重复播放时的播放类型。
android:repeatCount:动画重复的次数(注意是重复的次数),可以是你想循环播放的次数,也是可以是infinite:表示无限循环
android:interpolator:设定的插值器,它主要用来为动画设置一些特殊的效果,比方说:加速运动、减速运动、动画结束的时候弹 起等等
(1)roate动画,旋转动画

上面我们交代过四种动画有共有属性和私有属性,现在我们先讲讲私有属性。
这里可以参考roateanimation类的说明文档(https://developer.android.com/reference/android/view/animation/RotateAnimation.html)
属性:

android:fromDegrees
    Float. Starting angular position, in degrees.
    动画开始时的旋转的角度位置,浮点类型,正值代表顺时针方向的度数,负值代表逆时针。
android:toDegrees
    Float. Starting angular position, in degrees.
    动画结束时旋转到的角度位置,float类型,正值代表顺时针方向度数,负值代码逆时针方向度数
android:pivotX
    Float or percentage. The X coordinate of the center of rotation. Expressed either: in pixels relative to the object's left edge (such as "5"), in percentage relative to the object's left edge (such as "5%"), or in percentage relative to the parent container's left edge (such as "5%p").
    表示的事旋转点的X轴坐标,可以是数值、百分数、百分数p三种样式,比如50、50%、50%p。如果为数值,表示当前View的左上角(Android中View的原点)加上50px作为旋转点X坐标;如果是50%,表示当前View的左上角加上自己宽度的50%作为旋转点的X坐标;如果是50%p,则表示在当前控件的左上角加上父控件宽度的50%作为旋转点X坐标。
android:pivotY
    和pivotX 同理,这里不再獒述。
    默认的旋转起始点是View左上角的视图原点,需要注意的是这里的开始旋转角度fromDegrees和结束时旋转角度都是相对于其实位置而言的。

可以参考这篇博客:http://blog.csdn.net/dmk877/article/details/51912104,讲的很好很全面。

(2)Alpha动画(渐变透明度动画)

一种淡入或者淡出的动画,可以参考AlphaAnimation类说明文档https://developer.android.com/reference/android/view/animation/AlphaAnimation.html
属性说明:

android:fromAlpha
    Float. Starting opacity offset, where 0.0 is transparent and 1.0 is opaque.
    浮点值,表示动画开始时的透明度,变化范围从0.0(透明)到1.0(不透明)。
android:toAlpha
    Float. Ending opacity offset, where 0.0 is transparent and 1.0 is opaque.
    浮点值,表示动画结束时的透明度,取值同上。
(3)translate(位移动画)

A vertical and/or horizontal motion. Supports the following attributes in any of the following three formats: values from -100 to 100 ending with "%", indicating a percentage relative to itself; values from -100 to 100 ending in "%p", indicating a percentage relative to its parent; a float value with no suffix, indicating an absolute value. Represents a TranslateAnimation.https://developer.android.com/reference/android/view/animation/TranslateAnimation.html
  从官方文档的描述中,我们可以知道:
位移动画是一种水平或者竖直的运动,他有三种不同的单位表示:第一种是以-100%-100%之间的值来结尾,表示移动的距离相对自身;第二种是以-100%p-100%p之间的值,表示移动的距离是相对于父控件;一种是没有任何后缀的浮点值,表示移动的绝对距离.这和上面roate中的情况是一样的.

android:fromXDelta
    Float or percentage. Starting X offset. Expressed either: in pixels relative to the normal position (such as "5"), in percentage relative to the element width (such as "5%"), or in percentage relative to the parent width (such as "5%p").
    起始点的X轴坐标,可以是数值、百分数、百分数p三种形式,具体的已经在rotate里边讲过了,就是相对于View视图左上角(原点)的偏移量。
android:toXDelta
    Float or percentage. Ending X offset. Expressed either: in pixels relative to the normal position (such as "5"), in percentage relative to the element width (such as "5%"), or in percentage relative to the parent width (such as "5%p").
    结束点的X坐标。
android:fromYDelta
    Float or percentage. Starting Y offset. Expressed either: in pixels relative to the normal position (such as "5"), in percentage relative to the element height (such as "5%"), or in percentage relative to the parent height (such as "5%p").
    起始点的Y坐标。
android:toYDelta
    Float or percentage. Ending Y offset. Expressed either: in pixels relative to the normal position (such as "5"), in percentage relative to the element height (such as "5%"), or in percentage relative to the parent height (such as "5%p").
    结束点的Y坐标。
(4)scale缩放动画

A resizing animation. You can specify the center point of the image from which it grows outward (or inward) by specifying pivotX and pivotY. For example, if these values are 0, 0 (top-left corner), all growth will be down and to the right. Represents a ScaleAnimation.
  一种伸缩动画,你可以精确指定图片缩放的中心点。

android:fromXScale
    Float. Starting X size offset, where 1.0 is no change.
    浮点值,起始的X轴方向上相对自身的缩放比例。(1.0表示没有缩放,0.5表示缩小一倍,2表示放大一倍)
android:toXScale
    Float. Ending X size offset, where 1.0 is no change.
    结尾的X轴方向上相对于自身的缩放比例。
android:fromYScale
    Float. Starting Y size offset, where 1.0 is no change.
    起始方向上Y轴方向上相对于自身的缩放比例。
android:toYScale
    Float. Ending Y size offset, where 1.0 is no change.
    结尾方向上Y轴相对自身的缩放比例。
android:pivotX
    Float. The X coordinate to remain fixed when the object is scaled.
    缩放起点X轴坐标,可以是数值、百分数、百分数p,具体意义和 roate中的一致。
android:pivotY
    Float. The Y coordinate to remain fixed when the object is scaled.
    缩放起点Y轴坐标,取值及意义同pivotX
(5)set标签的使用

set标签是一系列动画的组合,也就是说我们可以通过set让一个View同时执行多张动画,set标签本身是没有属性的,但是他可以使用Animation类的属性。当 android:shareInterpolator = true时,set标签的属性会作用于所有的子元素。(具体的Animation属性我们后面会做进一步详解)。

ELEMENTS:
    <set>
        A container that holds other animation elements (<alpha>, <scale>, <translate>, <rotate>) or other <set> elements. Represents an AnimationSet.
        attributes:
        android:interpolator 该属性为一个指示器,指向一个动画资源文件,该值必须是一个资源文件的引用(就像示例代码中那样指向一个包名)而不是一个类名。
            Interpolator resource. An Interpolator to apply on the animation. The value must be a reference to a resource that specifies an interpolator (not an interpolator class name). There are default interpolator resources available from the platform or you can create your own interpolator resource. See the discussion below for more about Interpolators.
        android:shareInterpolator 该属上面已经交代过了。
            Boolean. "true" if you want to share the same interpolator among all child elements.

我们来看看一个组合动画的例子

    <?xml version="1.0" encoding= "utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:fillAfter="true">

        <alpha
            android:fromAlpha= "0.0"
            android:toAlpha= "1.0"
            android:duration= "3000" />

        <scale
            android:fromXScale= "0.0"
            android:toXScale= "1.0"
            android:fromYScale= "0.0"
            android:toYScale= "1.0"
            android:pivotX= "50%"
            android:pivotY= "50%"
            android:duration= "3000" />

        <rotate
            android:fromDegrees= "0"
            android:toDegrees= "720"
            android:pivotX= "50%"
            android:pivotY= "50%"
            android:duration= "3000"/>

         <translate
            android:startOffset= "3000"
            android:fromXDelta= "0"
            android:fromYDelta= "0"
            android:toXDelta= "85"
            android:toYDelta= "0"
            android:duration= "1000" />

        <alpha
            android:startOffset= "4000"
            android:fromAlpha= "1.0"
            android:toAlpha= "0.0"
            android:duration= "1000" />

    </set>
    在这个set标签中,我们包含了上面四种不同的动画,当我们对一张图start()这个动画后会同时执行前三种动画,持续3S,之后执行平移动画(startOffset= "3000",duration= "1000"),最后执行最后一个渐变动画(startOffset= "4000").
(6)interpolator插值器

An interpolator is an animation modifier defined in XML that affects the rate of change in an animation. This allows your existing animation effects to be accelerated, decelerated, repeated, bounced, etc.
  An interpolator is applied to an animation element with the android:interpolator attribute, the value of which is a reference to an interpolator resource.
  All interpolators available in Android are subclasses of the Interpolator class. For each interpolator class, Android includes a public resource you can reference in order to apply the interpolator to an animation using the android:interpolator attribute. The following table specifies the resource to use for each interpolator:
  上面官方对于interpolator的解释为:一种定义在XML文件中影响动画变化速率的调节器,它允许你对目前的动画做出加速、减速、重复、弹跳等效果。
  一个插值器通过android:interpolator属性来作用于一个动画,该属性作用的值是一个interpolator资源文件,如上面示例中提到的android:interpolator="@[package:]anim/interpolator_resource"
  在Android中所有可用的interpolator都是Interpolator类的子类.(https://developer.android.com/reference/android/view/animation/Interpolator.html)对于interpolator类,Android包含一个你可以通过 android:interpolator 元素调用的公共资源文件,下面的这张表指定了指向各个interpolator的资源。

Interpolator对象                      资源ID                                        功能作用
AccelerateDecelerateInterpolator    @android:anim/accelerate_decelerate_interpolator     先加速再减速
AccelerateInterpolator            @android:anim/accelerate_interpolator                 加速
AnticipateInterpolator            @android:anim/anticipate_interpolator                 先回退一小步然后加速前进
AnticipateOvershootInterpolator      @android:anim/anticipate_overshoot_interpolator      先回退一小步然后加速前进,超出终点一小步后再回到终点
BounceInterpolator                @android:anim/bounce_interpolator                     最后阶段弹球效果
CycleInterpolator                  @android:anim/cycle_interpolator                      周期运动
DecelerateInterpolator            @android:anim/decelerate_interpolator                 减速
LinearInterpolator                @android:anim/linear_interpolator                     匀速
OvershootInterpolator              @android:anim/overshoot_interpolator                  快速到达终点并超出一小步最后回到终点

我们可以创建一个插值器资源修改插值器的属性来自定义个性化插值器,比如修改AnticipateInterpolator的加速速率,调整CycleInterpolator的循环次数等。为了完成这种需求,我们需要创建XML资源文件,然后将其放于/res/anim下,然后再动画元素中引用即可。我们先来看一下几种常见的插值器可调整的属性:

<accelerateDecelerateInterpolator>      无
<accelerateInterpolator>                android:factor 浮点值,加速速率,默认为1
<anticipateInterploator>                android:tension 浮点值,起始点后退的张力、拉力数,默认为2
<anticipateOvershootInterpolator>      android:tension 同上; android:extraTension 浮点值,拉力的倍数,默认为1.5(2  * 1.5)
<bounceInterpolator>                    无
<cycleInterplolator>                    android:cycles 整数值,循环的个数,默认为1
<decelerateInterpolator>                android:factor 浮点值,减速的速率,默认为1
<linearInterpolator>                    无
<overshootInterpolator>                  浮点值,超出终点后的张力、拉力,默认为2

关于这几种值得演示可以再次参考一下这篇博客http://blog.csdn.net/dmk877/article/details/52011155
举个例子:
  我们在XML中定义一个Interpolator文件—— res/anim/my_overshoot_interpolator.xml:

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"
    />

动画的XML文件中可以这么使用:

    <scale xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@anim/my_overshoot_interpolator"  //一句代码的事
        android:fromXScale="1.0"
        android:toXScale="3.0"
        android:fromYScale="1.0"
        android:toYScale="3.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="700" />
     这里我们修改了超出终点后张力、拉力的值为7.0,运行后会发现明显回弹的效果会更加急促。

以上就是补间动画在XML文件中的定义与使用,关于补间动画在JAVA代码中的使用可以参考这篇文章:http://blog.csdn.net/dmk877/article/details/51980734

三、属性动画(Property Animation)

https://developer.android.com/guide/topics/graphics/prop-animation.html#value-animator
1.属性动画与视图动画的区别
  前面我们说过Android动画分为视图动画(View Animation)属性动画(Property Animation),现在我们来谈谈属性动画这个大类。首先我们分清楚属性动画和视图动画的区别,在谷歌的官方说明中的解释如下:
  The view animation system provides the capability to only animate View objects, so if you wanted to animate non-View objects, you have to implement your own code to do so. The view animation system is also constrained in the fact that it only exposes a few aspects of a View object to animate, such as the scaling and rotation of a View but not the background color, for instance.
  View动画只提供了容纳View对象的容器,如果你想作用于非View对象时,你必须自己通过代码来实现。View动画另一个不足是他只暴露了几个方面的动效给View对象,诸如平移旋转等,而不是View的背景颜色等等。
  官方翻译比较绕,这里在翻译一下,就是说补间动画只能对一个View对象进行四种操作(平移、旋转、透明度、缩放),而不能是一个对象的属性,比如颜色,大小等,但是属性动画就可以
  Another disadvantage of the view animation system is that it only modified where the View was drawn, and not the actual View itself. For instance, if you animated a button to move across the screen, the button draws correctly, but the actual location where you can click the button does not change, so you have to implement your own logic to handle this.
  另一个弊端是View动画只能改变View绘制的地方,并不是真正的View本身。举个例子,如果你做一个穿过屏幕的Button动效,Button的绘制时是正确的,但是Button的实际可以点击的位置是没有变的,所以你得通过自己的逻辑来解决这个问题(就是说你还是得点击原来Button的位置才会有相应的响应事件)
  With the property animation system, these constraints are completely removed, and you can animate any property of any object (Views and non-Views) and the object itself is actually modified. The property animation system is also more robust in the way it carries out animation. At a high level, you assign animators to the properties that you want to animate, such as color, position, or size and can define aspects of the animation such as interpolation and synchronization of multiple animators.
  通过属性动画系统,这些约束将被彻底解除,你可以对任何对象(Views and non-Views)的任何属性做动画效果,并且对象自身也会被实际的改变。属性动画系统在具体实施动画方面也是更加强大的。从更高层次来说,你可以选择你想要的属性来给其添加动画,诸如颜色、位置或者尺寸,并且你可以通过多个插值器和定义多个动画同步来实现特定方面的动画。
2.具体类
  属性动画常用的类有:ValueAnimator, ObjectAnimator, or AnimatorSet.这三个类可以通过一张图来很好的解释

20160730191354538.png

可以看到,ValueAnimator和AnimatorSet是继承自Animator类的,并且位于同一等级;ObjectAnimator和TimeAnimator是继承自ValueAnimator类的,两者位于同一等级。
(1)ValueAnimator
(https://developer.android.com/reference/android/animation/ValueAnimator.html)
  This class provides a simple timing engine for running animations which calculate animated values and set them on target objects. 该类通过通过计算动效值为运动的动画提供了一个简单的时间引擎,并将其作用于目标对象上面。
  The ValueAnimator class lets you animate values of some type for the duration of an animation by specifying a set of int, float, or color values to animate through. You obtain a ValueAnimator by calling one of its factory methods: **ofInt(), ofFloat(), **or ofObject()
  ValueAnimator类让你在动画运行期间通过指定int,float或者颜色值来确定动画值。你可以通过调用ofInt(), ofFloat(), 或者 ofObject()这三个方法来获得一个ValueAnimator。例如:

ValueAnimator valueAnimator=ValueAnimator.ofFloat(0,100);
valueAnimator.setDuration(3000);

valueAnimator.addUpdateListener(new AnimatorUpdateListener() {

    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        float value=(Float) animation.getAnimatedValue();
        ivImage.setTranslationX(value);
    }
});
valueAnimator.start();
    这段代码中我们设置了一个动画值从0变到100的,持续时间3S的动画属性,然后给这个ValueAnimator设置一个监听器,
通过getAnimatedValue()取得动画值并将其通过getAnimatedValue()设置给了ImageView对象在X轴的坐标,运行后会看
到这个ImageView在X轴上移动了100px.

啊,好吧,看过本人蹩手蹩脚的翻译之后相信你已经是一头雾水了,上面提到了ValueAnimator类的三个常用的方法:ofFloat,ofInt,ofObject.
①ValueAnimator ofInt (int... values)
Parameters
**values int: **A set of values that the animation will animate between over time.
  这是一组可变参数,当然参数的是Int类型。我们可以传任何值进去,传进去的值列表,就表示动画播放时代的变化范围,比如ofInt(3,9,6)就表示从数值3变化到数值9再变化到数值6。
Returns
ValueAnimator ** A ValueAnimator object that is set up to animate between the given values.
  返回一个ValueAnimator对象,给谁设置的值就返回谁。
②ValueAnimator ofFloat (float... values) 参数意义同上
Parameters
values float: A set of values that the animation will animate between over time.
Returns
ValueAnimator ** A ValueAnimator object that is set up to animate between the given values.
③ValueAnimator ofObject (TypeEvaluator evaluator, Object... values)
  这里第一个参数是TypeEvaluator类 (https://developer.android.com/reference/android/animation/TypeEvaluator.html)
关于这个动画我们后面暂时用不到,我们后面再说。
  
ValueAnimator是计算动画过程中变化的值,包含动画的开始值,结束值,持续时间等属性。但是这些值与我们的控件是无关的,要想把计算出来的值应用到对象上,必须为ValueAnimator注册一个监听器,该监听器负责更新对象的属性值。在实现这个监听器的时候,可以通过getAnimatedValue()的方法来获取当前动画的值,拿到这个值后,我们就可以设置给这个对象的在X或者Y轴的偏移量等等,来让图像实现我们预定的动画。

(2)ObjectAnimator
(https://developer.android.com/reference/android/animation/ObjectAnimator.html)
  相比于ValueAnimator,在开发中可能ObjectAnimator要比ValueAnimator用的多,因为ObjectAnimator可以直接操作对象的属性,而不用像ValueAnimator那么麻烦的设置监听器检测值动画值。
假如让一个ImageView做旋转的动画,代码可以这样写:

ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(ivImage,"rotation",0,360);
objectAnimator.setDuration(3000);
objectAnimator.start();
    这里第一个参数要求传入一个object对象,即进行动画的对象,在上面我们传了一个ImageView。第二个参数是属性的名字,因为做旋转动画所以这里传的属性的名字为“rotation”。后面就是可变参数了,这里我们传的是0,360,表示让ImageView旋转360度,然后设置时长,调用start方法

关于ObjectAnimator类这里有很多方法:

ObjectAnimator ofFloat (Object target, String propertyName, float... values)
ObjectAnimator ofInt (T target, Property<T, Integer> xProperty, Property<T, Integer> yProperty,  Path path)
ObjectAnimator ofInt (T target, Property<T, Integer> property, int... values)
ObjectAnimator ofInt (Object target, String propertyName, int... values)
ObjectAnimator ofInt (Object target, String xPropertyName,  String yPropertyName,  Path path)
等等,这里就不做一一讲解了.这里我们对经常用到的属性做一个小的总结:
①translationX和translationY:表示在X轴或者Y轴方向上的位移
② scaleX和scaleY:表示在X轴或者Y轴方向上的缩放
③rotation、rotationX和rotationY:这三个属性控制View对象围绕支点进行2D和3D旋转。
④ pivotX和pivotY:这两个属性控制着View对象的支点位置,围绕这个支点进行旋转和缩放变换处理。默认情况下,该支点的位置就是View对象的中心点。
⑤x和y:这是两个简单实用的属性,它描述了View对象在它的容器中的最终位置,它是最初的左上角坐标和translationX和translationY值的累计和。
⑥ alpha:它表示View对象的alpha透明度。默认值是1(不透明),0代表完全透明(不可见)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,498评论 25 707
  • 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让全面说说Android的动画,所以今...
    未聞椛洺阅读 2,691评论 0 10
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,399评论 2 45
  • 我必须是你近旁的一株木棉 作为树的形象跟你站在一起
    小鹿和小璐阅读 171评论 0 1
  • 今天下午,我准备把家里的玻璃擦一擦。 我把抹布洗干净,来到了窗台上,就开始擦玻璃啦。我爬到窗台上,用抹布上下来...
    谷佳琦阅读 1,916评论 0 0