RotateAnimation(旋转动画)
今天通过指定一个动画效果(类似钟摆的动画)来讲解RotateAnimation的用法。ScaleAnimation 、AlphaAnimation、 TranslateAnimation 的用法请参照相关文章。
先看一下下面这个坐标系,如果toDegrees < fromDegrees , 则动画是逆时真旋转的。RotateAnimation一个简单的构造函数RotateAnimation(FromDegrees,toDegrees)便可实现旋转动画。
好了,下面就来完成一个类似钟摆的动画。
1、在res/anim目录下创建文件 rotate_anim.xml , 内容如下:
1. <?xml version="1.0" encoding="utf-8"?>
2. <rotate xmlns:android="http://schemas.android.com/apk/res/android"
3. android:duration="500"
4. android:fromDegrees="-90"
5. android:pivotX="50%"
6. android:pivotY="0"
7. android:repeatCount="-1"
8. android:repeatMode="reverse"
9. android:toDegrees="90" >
10.
11. </rotate>
其中,动画时长 android:duration="500" : 完成一次动画500毫秒。
Android:pivotX=“50%”: 图片的中点。
android:pivotY="0": Y轴没有偏移量。 pivotX和pivotY确认的坐标就是 (viewX + vWidth/2 , viewY)。
android:fromDegrees , android:toDegrees , -90 度到 90 度 。
2、在res/layout目录下创建 rotate_anim_layout.xml ,内容如下:
1. <?xml version="1.0" encoding="utf-8"?>
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3. android:layout_width="match_parent"
4. android:layout_height="match_parent"
5. android:orientation="vertical" >
6.
7. <ImageView
8. android:id="@+id/tweened_rotate_img"
9. android:layout_width="150dp"
10. android:layout_height="wrap_content"
11. android:src="@drawable/ting_frame_0"
12. android:contentDescription="@string/app_name"
13. android:adjustViewBounds="true"
14. android:layout_gravity="center" />
15.
16. </LinearLayout>
该文件中使用到了名为ting_frame_0的图片,请准备好。
3、创建用于显示动画的activity , rotateAnimActivity.Java 内容如下:
1. import android.app.Activity;
2. import android.os.Bundle;
3. import android.view.animation.Animation;
4. import android.view.animation.AnimationUtils;
5. import android.widget.ImageView;
6. public class RotateAnimActivity extends Activity {
7.
8. Animation mRotateAnim;
9. private ImageView mRotateImg;
10.
11. @Override
12. public void onCreate(Bundle savedInstanceState) {
13. super.onCreate(savedInstanceState);
14. setContentView(R.layout.rotate_anim_layout);
15. init();
16. this, R.anim.rotate_anim);
17.
18. }
19.
20. private void init() {
21. mRotateImg = (ImageView) findViewById(R.id.tweened_rotate_img);
22. }
23.
24. @Override
25. protected void onPause() {
26. super.onPause();
27. if (mRotateAnim != null) {
28. mRotateAnim.cancel();
29. }
30. }
31.
32. @Override
33. protected void onResume() {
34. super.onResume();
35. if (mRotateAnim != null) {
36. mRotateImg.startAnimation(mRotateAnim);
37. }
38. }
39.
40. }
AnimationUtils.loadAnimation(this, R.anim.rotate_anim);
加载资源
mRotateImg.startAnimation(mRotateAnim);
ok,大功告成!