RotateAnimation(旋转动画)

今天通过指定一个动画效果(类似钟摆的动画)来讲解RotateAnimation的用法。ScaleAnimation 、AlphaAnimation、 TranslateAnimation 的用法请参照相关文章。

先看一下下面这个坐标系,如果toDegrees < fromDegrees , 则动画是逆时真旋转的。RotateAnimation一个简单的构造函数RotateAnimation(FromDegrees,toDegrees)便可实现旋转动画。


Android 动画 Tweened Animation 之 RotateAnimation钟摆动画_ide

好了,下面就来完成一个类似钟摆的动画。

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,大功告成!