AnimationDrawable 代表动画资源。Android 既支持逐帧动画,也支持补间动画。
定义补间动画的 XML 资源文件以 <set> 元素作为根元素,该元素可以设定如下 4 个元素:
- alpha:透明度;
- scale:缩放;
- translate:位移;
- rotate:旋转。
定义动画的 XML 资源文件应该放在 /res/anim 路径下。
<set>、<alpha>、<scale>、<translate>、<rotate> 都可以指定 android:interpolator 属性,该属性指定动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等,Android 系统的 R.anim 对象中包含了定制常量,它们定义了不同的动画速度,例如:
- linear_interpolator: 匀速
- accelerate_interpolator: 加速
- decelerate_interpolator: 减速
如果程序需要让 <set> 元素下的所有变换效果使用相同的动画速度,则可以指定 android:shareInterpolator="true"。
我们可以通过两张方式访问动画资源文件:
- 在 XML 中
@[<package_name>:]anim/file_name
- 在 Java 中
[<package_name.>]R.anim.file_name
下面是一个简单的使用示例:
首先是自定义的 test_anim01.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: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>
之后是主布局文件的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorGray"
android:orientation="vertical"
android:gravity="center_horizontal"
>
<ImageView
android:id="@+id/imageAnim"
android:layout_width="400dp"
android:layout_height="400dp"
android:scaleType="fitCenter"
android:src="@drawable/img07"
android:layout_marginTop="20dp"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="@string/start"
android:onClick="start"
/>
</LinearLayout>
接下来是主程序文件的源代码:
package com.toby.personal.testlistview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
final private static String TAG = "Toby_Test";
private ImageView imageView;
private Animation animation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageAnim);
animation = AnimationUtils.loadAnimation(this, R.anim.test_anim01);
animation.setFillAfter(true);
}
public void start(View view) {
imageView.startAnimation(animation);
}
}
本示例的运行效果,各位可以自行运行测试,如果出现运行不了等问题,可以给我留言。本文参考文献:《疯狂Android讲义(第2版)》