Android复习(二)应用资源 --> 动画

没什么好总结的 复制自 https://developer.android.google.cn/guide/topics/resources/animation-resource 有需要的可以查看官方文档

动画资源

一个动画资源可以定义以下两种动画类型之一:

属性动画
通过使用 Animator 在设定的时间段内修改对象的属性值来创建动画。
视图动画

使用视图动画框架可以创建两种类型的动画:

属性动画

在 XML 中定义的动画,用于在设定的一段时间内修改目标对象的属性,例如背景颜色或 Alpha 值。

文件位置:
res/animator/filename.xml
该文件名将用作资源 ID。
编译后的资源数据类型:
指向 ValueAnimatorObjectAnimator 或 AnimatorSet 的资源指针。
资源引用:
在 Java 或 Kotlin 代码中:R.animator.filename
在 XML 中:@[package:]animator/filename
语法:
 
   <set
      android:ordering=["together" | "sequentially"]>

        <objectAnimator
            android:propertyName="string"
            android:duration="int"
            android:valueFrom="float | int | color"
            android:valueTo="float | int | color"
            android:startOffset="int"
            android:repeatCount="int"
            android:repeatMode=["repeat" | "reverse"]
            android:valueType=["intType" | "floatType"]/>

        <animator
            android:duration="int"
            android:valueFrom="float | int | color"
            android:valueTo="float | int | color"
            android:startOffset="int"
            android:repeatCount="int"
            android:repeatMode=["repeat" | "reverse"]
            android:valueType=["intType" | "floatType"]/>

        <set>
            ...
        </set>
    </set>

  

    

该文件必须具有一个根元素,可以是 <set><objectAnimator> 或 <valueAnimator>。您可以将动画元素(包括其他 <set> 元素)组合到 <set> 元素中。

元素:
<set>
容纳其他动画元素(<objectAnimator><valueAnimator> 或其他 <set> 元素)的容器。代表 AnimatorSet

您可以指定嵌套的 <set> 标记来将动画进一步组合在一起。每个 <set> 都可以定义自己的 ordering 属性。

属性:

android:ordering
关键字。指定此集合中动画的播放顺序。

说明
sequentially 依序播放此集合中的动画
together(默认) 同时播放此集合中的动画。

<objectAnimator>
在特定的一段时间内为对象的特定属性创建动画。代表 ObjectAnimator

属性:

android:propertyName
字符串。必需。要添加动画的对象属性,通过其名称引用。例如,您可以为 View 对象指定 "alpha" 或 "backgroundColor"。 但是,objectAnimator 元素不包含 target 属性,因此您无法在 XML 声明中设置要添加动画的对象。您必须通过调用 loadAnimator() 来扩充您的动画 XML 资源,然后调用 setTarget() 来设置包含此属性的目标对象。
android:valueTo
浮点数、整数或颜色。必需。动画属性的结束值。颜色以六位十六进制数字表示(例如,#333333)。
android:valueFrom
浮点数、整数或颜色。动画属性的开始值。如果未指定,则动画将从属性的 get 方法获得的值开始。颜色以六位十六进制数字表示(例如,#333333)。
android:duration
整数。动画的时间,以毫秒为单位。默认为 300 毫秒。
android:startOffset
整数。调用 start() 后动画延迟的毫秒数。
android:repeatCount
整数。动画的重复次数。设为 "-1" 表示无限次重复,也可设为正整数。例如,值 "1" 表示动画在初次播放后重复播放一次,因此动画总共播放两次。默认值为 "0",表示不重复。
android:repeatMode
整数。动画播放到结尾处的行为。android:repeatCount 必须设置为正整数或 "-1",该属性才有效。设置为 "reverse" 可让动画在每次迭代时反向播放,设置为 "repeat" 则可让动画每次从头开始循环播放。
android:valueType
关键字。如果值为颜色,则不要指定此属性。动画框架会自动处理颜色值

说明
intType 指定动画值为整数
floatType(默认) 指定动画值为浮点数

<animator>在指定的时间段内执行动画。代表 ValueAnimator

属性:

android:valueTo浮点数、整数或颜色。必需。动画的结束值。颜色以六位十六进制数字表示(例如,#333333)。android:valueFrom浮点数、整数或颜色。必需。动画的开始值。颜色以六位十六进制数字表示(例如,#333333)。android:duration整数。动画的时间,以毫秒为单位。默认为 300ms。android:startOffset整数。调用 start() 后动画延迟的毫秒数。。android:repeatCount整数。动画的重复次数。设为 "-1" 表示无限次重复,也可设为正整数。例如,值 "1" 表示动画在初次播放后重复播放一次,因此动画总共播放两次。默认值为 "0",表示不重复。android:repeatMode整数。动画播放到结尾处的行为。android:repeatCount 必须设置为正整数或 "-1",该属性才有效。设置为 "reverse" 可让动画在每次迭代时反向播放,设置为 "repeat" 则可让动画每次从头开始循环播放。android:valueType关键字。如果值为颜色,则不要指定此属性。动画框架会自动处理颜色值。

说明
intType 指定动画值为整数
floatType(默认) 指定动画值为浮点数

示例:保存在 res/animator/property_animator.xml 的 XML 文件:

<set android: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>

  

        

为了运行此动画,您必须将代码中的 XML 资源扩充为 AnimatorSet 对象,然后在开始运行动画集之前为所有动画设置目标对象。为方便起见,调用 setTarget() 即可设置一个用于 AnimatorSet 的所有子项的目标对象。以下代码展示了如何执行此操作:

java代码:

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

kotlin代码:

    val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator)
        .apply {
            setTarget(myObject)
            start()
        }

  

另请参阅:

视图动画

视图动画框架可支持补间动画和逐帧动画,两者都可以在 XML 中声明。以下几个部分介绍如何使用这两种方法。

补间动画

在 XML 中定义的动画,用于对图形执行旋转、淡出、移动和拉伸等转换。

文件位置:
res/anim/filename.xml
该文件名将用作资源 ID。
编译后的资源数据类型:
指向 Animation 的资源指针。
资源引用:
在 Java 中:R.anim.filename
在 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> 或包含一组(或多组)其他动画元素(甚至是嵌套的 <set> 元素)的 <set> 元素。

元素:
<set>
容纳其他动画元素(<alpha><scale><translate><rotate>)或其他 <set> 元素的容器。代表 AnimationSet

属性:

android:interpolator
插值器资源。 要应用于动画的 Interpolator。 该值必须是对指定插值器的资源的引用(而不是插值器类名称)。您可以使用平台提供的默认插值器资源,也可以创建自己的插值器资源。有关插值器的详细信息,请参阅以下说明。
android:shareInterpolator
布尔值。如果要在所有子元素中共用同一插值器,则为“true”。
<alpha>
淡入或淡出动画。代表 AlphaAnimation

属性:

android:fromAlpha
浮点数。起始不透明度偏移,0.0 表示透明,1.0 表示不透明。
android:toAlpha
浮点数。结束不透明度偏移,0.0 表示透明,1.0 表示不透明。

要了解 <alpha> 支持的更多属性,请参阅 Animation 类引用(其中所有 XML 属性均由此元素继承)。

<scale>
大小调整动画。您可以通过指定 pivotX 和 pivotY,来指定图片向外(或向内)扩展的中心点。例如,如果这两个值为 0、0(左上角),则所有扩展均向右下方向进行。代表 ScaleAnimation

属性:

android:fromXScale
浮点数。起始 X 尺寸偏移,其中 1.0 表示不变。
android:toXScale
浮点数。结束 X 尺寸偏移,其中 1.0 表示不变。
android:fromYScale
浮点数。起始 Y 尺寸偏移,其中 1.0 表示不变。
android:toYScale
浮点数。结束 Y 尺寸偏移,其中 1.0 表示不变。
android:pivotX
浮点数。在对象缩放时要保持不变的 X 坐标。
android:pivotY
浮点数。在对象缩放时要保持不变的 Y 坐标。

要了解 <scale> 支持的更多属性,请参阅 Animation 类引用(其中所有 XML 属性均由此元素继承)。

<translate>
垂直和/或水平移动。支持采用以下三种格式之一的以下属性:从 -100 到 100 的以“%”结尾的值,表示相对于自身的百分比;从 -100 到 100 的以“%p”结尾的值,表示相对于其父项的百分比;不带后缀的浮点值,表示绝对值。代表 TranslateAnimation

属性:

android:fromXDelta
浮动数或百分比。起始 X 偏移。表示方式:相对于正常位置的像素数(例如 "5"),相对于元素宽度的百分比(例如 "5%"),或相对于父项宽度的百分比(例如 "5%p")。
android:toXDelta
浮动数或百分比。结束 X 偏移。表示方式:相对于正常位置的像素数(例如 "5"),相对于元素宽度的百分比(例如 "5%"),或相对于父项宽度的百分比(例如 "5%p")。
android:fromYDelta
浮动数或百分比。起始 Y 偏移。表示方式:相对于正常位置的像素数(例如 "5"),相对于元素高度的百分比(例如 "5%"),或相对于父项高度的百分比(例如 "5%p")。
android:toYDelta
浮动数或百分比。结束 Y 偏移。表示方式:相对于正常位置的像素数(例如 "5"),相对于元素高度的百分比(例如 "5%"),或相对于父项高度的百分比(例如 "5%p")。

要了解 <translate> 支持的更多属性,请参阅 Animation 类引用(其中所有 XML 属性均由此元素继承)。

<rotate>
旋转动画。代表 RotateAnimation

属性:

android:fromDegrees
浮点数。起始角度位置,以度为单位。
android:toDegrees
浮点数。结束角度位置,以度为单位。
android:pivotX
浮动数或百分比。旋转中心的 X 坐标。表示方式:相对于对象左边缘的像素数(例如 "5"),相对于对象左边缘的百分比(例如 "5%"),或相对于父级容器左边缘的百分比(例如 "5%p")。
android:pivotY
浮点数或百分比。旋转中心的 Y 坐标。表示方式:相对于对象上边缘的像素数(例如 "5"),相对于对象上边缘的百分比(例如 "5%"),或相对于父级容器上边缘的百分比(例如 "5%p")。

要了解 <rotate> 支持的更多属性,请参阅 Animation 类引用(其中所有 XML 属性均由此元素继承)。

示例:
保存在 res/anim/hyperspace_jump.xml 的 XML 文件:

 <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
        <scale
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:fromXScale="1.0"
            android:toXScale="1.4"
            android:fromYScale="1.0"
            android:toYScale="0.6"
            android:pivotX="50%"
            android:pivotY="50%"
            android:fillAfter="false"
            android:duration="700" />
        <set
            android:interpolator="@android:anim/accelerate_interpolator"
            android:startOffset="700">
            <scale
                android:fromXScale="1.4"
                android:toXScale="0.0"
                android:fromYScale="0.6"
                android:toYScale="0.0"
                android:pivotX="50%"
                android:pivotY="50%"
                android:duration="400" />
            <rotate
                android:fromDegrees="0"
                android:toDegrees="-45"
                android:toYScale="0.0"
                android:pivotX="50%"
                android:pivotY="50%"
                android:duration="400" />
        </set>
    </set>

  

以下应用代码会将动画应用到 ImageView 并启动动画:

java 代码:

ImageView image = (ImageView) findViewById(R.id.image);
    Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    image.startAnimation(hyperspaceJump);

kotlin 代码:

val image: ImageView = findViewById(R.id.image)
    val hyperspaceJump: Animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump)
    image.startAnimation(hyperspaceJump)

  

另请参阅:

插值器

插值器是在 XML 中定义的动画修改器,它会影响动画的变化率。插值器可对现有的动画效果执行加速、减速、重复、退回等。

插值器通过 android:interpolator 属性应用于动画元素,该属性的值是对插值器资源的引用。

Android 中提供的所有插值器都是 Interpolator 类的子类。为便于您使用 android:interpolator 属性将插值器应用于动画,Android 针对每个插值器类包含了一个可供您引用的公共资源。下表指定了每个插值器要使用的资源:

插值器类 资源 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

您可以通过以下方式使用 android:interpolator 属性应用上述某个插值器:

   
 <set android:interpolator="@android:anim/accelerate_interpolator">
        ...
    </set>

  

    

自定义插值器

如果您对平台提供的插值器(在上表中列出)不满意,则可以使用修改过的属性创建自定义插值器资源。例如,您可以调整 AnticipateInterpolator 的加速率或调整 CycleInterpolator 的循环次数。为此,您需要在 XML 文件中创建自己的插值器资源。

文件位置:
res/anim/filename.xml
该文件名将用作资源 ID。
编译后的资源数据类型:
指向相应插值器对象的资源指针。
资源引用:
在 XML 中:@[package:]anim/filename
语法:
   
<?xml version="1.0" encoding="utf-8"?>
    <InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
        android:attribute_name="value"
        />

  

如果您不应用任何属性,则您的插值器的运作方式将与平台提供的插值器(在上表中列出)完全相同。

元素:
请注意,在 XML 中定义的每个 Interpolator 实现的名称都以小写字母开头。

<accelerateDecelerateInterpolator>
变化率在开始和结束时缓慢,但在中间会加快。

没有属性。

<accelerateInterpolator>
变化率在开始时较为缓慢,然后会加快。

属性:

android:factor
浮点数。加速率(默认为 1)。
<anticipateInterpolator>
先反向变化,然后再急速正向变化。

属性:

android:tension
浮点数。要应用的张力(默认为 2)。
<anticipateOvershootInterpolator>
先反向变化,再急速正向变化并超过目标值,然后以最终值结束。

属性:

android:tension
浮点数。要应用的张力(默认为 2)。
android:extraTension
浮点数。张力要乘以的倍数(默认值为 1.5)。
<bounceInterpolator>
变化会在结束时退回。

没有属性。

<cycleInterpolator>

按指定的循环次数重复动画。变化率符合正弦曲线图。

属性:

android:cycles
整数。循环次数(默认值为 1)。
<decelerateInterpolator>
变化率开始时很快,然后减慢。

属性:

android:factor
浮点数。减速率(默认值为 1)。
<linearInterpolator>
变化率恒定不变。

没有属性。

<overshootInterpolator>
先急速正向变化,再超过最终值,然后回到最终值。

属性:

android:tension
浮点数。要应用的张力(默认为 2)。

示例:

保存在 res/anim/my_overshoot_interpolator.xml 的 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" />

  

帧动画

在 XML 中定义的按顺序显示一系列图片的动画(如电影)。

文件位置:
res/drawable/filename.xml
该文件名将用作资源 ID。
编译后的资源数据类型:
指向 AnimationDrawable 的资源指针。
资源引用:
在 Java 中:R.drawable.filename
在 XML 中:@[package:]drawable.filename
语法:
   
<?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
布尔值。如果您想要执行一次动画,则为“true”;如果要循环播放动画,则为“false”。
<item>
单帧动画。必须是 <animation-list> 元素的子元素。

属性:

android:drawable
可绘制资源。要用于此帧的可绘制对象。
android:duration
整数。显示此帧的持续时间,以毫秒为单位。
示例:
保存在 res/drawable/rocket.xml 的 XML 文件:
    <?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>

  

   
以下应用代码会将该动画设置为 View 的背景,然后播放动画:
java 代码:

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

    rocketAnimation = rocketImage.getBackground();
    if (rocketAnimation instanceof Animatable) {
        ((Animatable)rocketAnimation).start();
    }

kotlin 代码:

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

    val rocketAnimation = rocketImage.background
    if (rocketAnimation is Animatable) {
        rocketAnimation.start()
    }

  

原文地址:https://www.cnblogs.com/developer-wang/p/12619513.html

时间: 2024-10-08 18:26:35

Android复习(二)应用资源 --> 动画的相关文章

Android复习(二)应用资源 --&gt; 颜色状态列表

转自: https://developer.android.google.cn/guide/topics/resources/color-list-resource 颜色状态列表资源 ColorStateList 是一个您可以在 XML 中定义的对象,您可以将其作为颜色来应用,但它实际上会更改颜色,具体取决于其应用到的 View 对象的状态.例如,Button 微件可以处于多种不同状态中的一种(按下.聚焦或既不按下也不聚焦),而使用颜色状态列表,您可以为每种状态提供不同的颜色. 您可以在 XML

Android复习(二)应用资源——&gt;更多类型

更多资源类型 本页面定义了更多类型的可具体化的资源,包括: Bool 带有布尔值的 XML 资源. 颜色 带有颜色值(十六进制颜色)的 XML 资源. 尺寸 带有尺寸值(包含度量单位)的 XML 资源. ID 提供应用资源和组件的唯一标识符的 XML 资源. 整数 带有整数值的 XML 资源. 整数数组 提供整数数组的 XML 资源. 类型化数组 提供 TypedArray(可用于可绘制对象数组)的 XML 资源. Bool 在 XML 中定义的布尔值. 注意:Bool 是使用 name 属性中

Android应用资源---动画资源(Animation Resources)

有两种类型的动画资源: 属性动画 在设定的时间内,通过修改与Animator类相关的对象的属性值来创建一个动画. 视图动画 有两种类型的视图动画框架 补间动画(Tween animation):通过执行通过执行一系列的与Animation类相关的单一图片的转换来创建动画. 帧动画(Frame animation):通过显示与AnimationDrawable类的顺序相关的图片序列来创建动画. 属性动画 动画被定义在要修改的目标对象属性的XML中,如设定时间内的背景色或alpha值. 文件位置(F

【Android高级】安卓各种动画使用方法详解

一.概述 Android提供了几种动画类型:View Animation .Drawable Animation .Property Animation . ViewAnimation相当简单,不过只能支持简单的缩放.平移.旋转.透明度基本的动画,且有一定的局限性. Drawable Animation就是所谓的帧动画,一般作为Drawable的背景使用. PropertyAnimation产生的原因,你希望View有一个颜色的切换动画:你希望可以使用3D旋转动画:你希望当动画停止时,View的

Hibernate复习(二)主要对象

1.SessionFactory 一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例. SessionFactory有以下特点: –它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享. –它是重量级的,这意味着不能随意创建或销毁它的实例.如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实 例.如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFac

转载分享:Android APP二次打包操作步骤介绍

看到好的技术教程就想转载一下,不喜勿喷!谢谢配合,仅供菜鸟学习研究,不要做坏事哦\(^o^)/~ 关于Android APP 二次打包现象已经屡见不鲜,为何"打包党"就吃准了Android平台,二次打包的操作过程到底有多简单? 本文将从Android apk的结构.二次打包的工具.步骤等方面向移动开发者说明二次打包操作的简单性,从而引起开发者对APP安全的重视,并及时对APP进行代码混淆或加固 保护等安全措施. 安卓apk的文件结构首先来看一下Android apk的内部文件结构. 随

Android转载二:工程目录详解

REF:http://blog.csdn.net/dianfusoft/article/details/7422540       可以看出这个工程由src,gen,Android2.3.3 jar包,assets,bin,res,AndroidManifest.xml,proguard.cfg,project.properties这几个文件(夹)组成,具体作用如下所示: 下面分层次详解几个重要的文件(夹) ● src文件夹 展开这个文件夹如下所示 可以看出,这个文件夹主要用来存放源文件 ●ge

Android中Acitvity跳转动画效果实现

在Activity中为我们提供了overridePendingTransition方法,该方法两个参数参数类型均为资源文件对应id,我们要用到的是anim下的动画效果文件.具体写法如 public class Main2Activity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC

Android应用开发之所有动画使用详解

题外话:有段时间没有更新博客了,这篇文章也是之前写了一半一直放在草稿箱,今天抽空把剩余的补上的.消失的这段时间真的好忙,节奏一下子有些适应不过来,早晨七点四十就得醒来,晚上九点四十才准备下班,好像最近都与世隔离了一样:然而自己每天还要熟悉一大套自己不熟悉.各种协议差异的代码.其实换个角度考虑还是蛮好的,忙,但很充实,有新的挑战与收获. [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.点我开始Android技术交流] 1 背景 不能只分析源码呀,分析的同时也