Android 动画AnimationDrawable资源 的使用方法


【AnimationDrawable资源基础知识】


 AnimationDrawable代表一个动画。

       下面以补间动画为例来介绍如何定义AnimationDrawable资源,定义补间动画的XML资源文件已<set.../>元素作为根元素,该元素可以指定如下4个元素:

  • alpha:设置透明度的改变。
  • scale:设置图片进行缩放改变。
  • translate:设置图片进行位移变换。
  • roate:设置图片进行旋转。    

        定义动画的XML资源应该放在/res/anmi/路径下,当使用ADT创建一个Android应用时默认不会包含该路径,开发者需要自行创建该路径。

        定义补间动画的思路很简单:设置一张图片的开始状态(包括透明度、位置、缩放比、旋转度)、并设置该图片的结束状态(包括透明度、位置、缩放比、旋转度),再设置动画的持续时间,Android系统会使用动画效果把这张图片从开始状态变换到结束状态。

        设置补间动画的语法格式如下:

 

 
<?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"] android:duration="持续时间"
android:fillAfter=["true"|"false"]> //设置动画结束后,保留结束状态
<alpha android:fromAlpha="float"
android:toAlpha="float"/> <!-- 定义缩放变换 --> <scale android:fromXScale="flaot" android:toXScale="flaot" android:fromYScale="flaot" android:toYScale="flaot" android:pivotX="flaot" android:pivotY="flaot" /> <!-- 定义为移变换 --> <translate android:fromXDelta="flaot" android:toXDelta="flaot" android:fromYDelta="flaot" android:toYDelta="flaot" /> <rotate android:fromDegrees="float" android:toDegrees="float" android:pivotX="float" android:pivotY="float"/> </set>
 

 

【解释】

1、上面的语法格式中包含了大量的fromXxx、toXxx属性,这些属性就用于定义图片的开始状态、结束状态。除此之外,当进行缩放变换(scale)、旋转(roate)变换时,还需要指定如下pivotX、pivotY两个属性,这两个属性用于指定变换的“中心点”——比如进行旋转变换时,需要指定“旋轴点”;进行缩放变换时需要指定“中心点”。

2、除此之外,上面<set.../>、<alpha.../>、<scale.../>、<translate.../>、<rotate.../>都可指定一个android:interpolator属性,该属性指定动画的变化速度,可实现匀速、正加速、负加速、无规则变加速等,Android系统的R.anim类中包含了许多常量,它们定义了不同的动画速度,例如:

  • linear_interpolator:匀速变换。
  • accelerate_interpolator:加速变换。
  • decelerate_interpolator:减速变换。  

3、如果程序想让<set.../>元素下所有的变换效果使用相同的动画加速,则可指定android:shareInterpolator="true"

4、通过上面的介绍,我们就能够创建一个动画xml文件,之后我们就能够将这个动画文件应用在指定的View上,在可以使用动画的组件View的方法中会有专门用于加载动画xml文件的方法,只要将R.anim.filename 作为参数赋给它即可完成,这一点我们不用担心。除此之外,有些能够加载动画的View组件的方法中的接收参数不是 xml 资源文件,而是一个Animation类型的参数,那么我们就需要将我们创建好的动画xml文件转化成Animation对象,这也非常的简单:

为了在Java代码中获取实际的Animation对象,则可调用AnimationUtils类的如下静态方法:

AnimationUtils.loadAnimation(Context ctx,int resId)   

 5、给属性的单位的设定:

 ①

<alpha android:fromAlpha="float" 
           android:toAlpha="float"/>
范围从 0.0 —— 1.0

 ②

<scale android:fromXScale="flaot"  
         android:toXScale="flaot"

         android:fromYScale="flaot"
         android:toYScale="flaot"

范围从 0.0 —— 1.0


         android:pivotX="flaot"
         android:pivotY="flaot"

 

android:pivotX的值共有三种设置方法:

1.android:pivot="50"这种方法使用绝对位置定位,屏幕右下角的座标是X:320,Y:480
2.android:pivot="50%"这种方法相对于控件本身定位 , 范围从 -100% 到 +100%
3.android:pivot="50%p"这种方法相对于控件的父控件定位 , 范围从 -100%p 到 +100%p

/>

③位移

<translate android:fromXDelta="flaot"
         android:toXDelta="flaot"
         android:fromYDelta="flaot"
         android:toYDelta="flaot"/>

四个值和上面的三种设置方式的值一样

 

④旋转

<rotate android:fromDegrees="float"
         android:toDegrees="float"

数值范围从 -360  到 +360


         android:pivotX="float"
         android:pivotY="float"

数值的设定方式和上面的三种方式一样

/>

 

【实例】

 程序清单文件:\res\anim\my_anim.xml文件

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator" android:shareInterpolator="true" android:duration="5000"> <!-- 定义缩放变换 --> <scale android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0" android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true" android:duration="2000"/> <!-- 定义为移变换 --> <translate android:fromXDelta="10" android:toXDelta="130" android:fromYDelta="30" android:toYDelta="-80" android:duration="2000"/> </set>

界面布局文件如下:

 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/java" /> <Button android:id="@+id/bn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始动画"/> </LinearLayout>

 

后台代码文件如下:

 
package com.example.studyresources; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.Button; import android.widget.ImageView; public class AnimationDrawableTest extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_animation_drawable_test); final ImageView image=(ImageView)findViewById(R.id.image); //加载动画资源 final Animation anim=AnimationUtils.loadAnimation(this,R.anim.my_anim); //设置动画结束后,保留结束状态 anim.setFillAfter(true);//① Button bn=(Button)findViewById(R.id.bn); bn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub //开始动画  image.startAnimation(anim); }}); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present.  getMenuInflater().inflate(R.menu.animation_drawable_test, menu); return true; } }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM