Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android動畫詳細探究

Android動畫詳細探究

編輯:Android開發實例

Animation是一個用於View,Surfaces和其它對象實現動畫效果的抽象類,其中常用的類是TranslateAnimation用於控制位置的改變

  一下列出一些重要的屬性和方法

Xml屬性

android:duration:運行動畫的時間

android:interpolator:定義用於平滑動畫運動的時間內插

android:repeatCount:定義動畫重復的時間

方法:

set:RepeatCount(int ):定義動畫重復的時間

setRepeatMode(int):通過設置重復時間定義動畫的行為

setStartOffset(long):以毫秒為單位的動畫運行前的延遲,一旦開始時間就達到了

Cancel():取消動畫

hasStarted():判斷動畫是否已在運行

initialize(int width, int height, int parentWidth, int parentHeight):初始化動畫

reset():重置動畫

Start()啟動動畫

其中還有一些常量

RESTART:重新運行

INFINITE:永無終止地運行

 

 

將動畫用於指定的控件,所有繼承自View的控件都有startAnimation(Animation)方法,通過調用此方法來應用動畫於控件

 

AnimationUtils類介紹

為應用動畫提供了通用的的方法,它有一個很重要的方法loadAnimation(Context,Animation)用於加載Animation的實例。

 

下面是一個實例 源碼下載

 

Animationpage.xml是布局文件

  1. <?xml version="1.0" encoding="utf-8"?> 
  2.  
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  4.  
  5.     android:orientation="vertical" 
  6.  
  7.     android:padding="10dip" 
  8.  
  9.     android:layout_width="match_parent" 
  10.  
  11.     android:layout_height="wrap_content"> 
  12.  
  13.       
  14.  
  15.     <ImageView android:id="@+id/pw" 
  16.  
  17.     android:background="@drawable/a" 
  18.  
  19.         android:layout_width="match_parent" 
  20.  
  21.         android:layout_height="wrap_content" 
  22.  
  23.        android:layout_marginBottom="10dip" 
  24.  
  25.     /> 
  26.  
  27.    
  28.  
  29.     <Button android:id="@+id/login" 
  30.  
  31.         android:layout_width="wrap_content" 
  32.  
  33.         android:layout_height="wrap_content" 
  34.  
  35.         android:textSize="26sp" 
  36.  
  37.         android:text="震蕩" 
  38.  
  39.     /> 
  40.  
  41.    
  42.  
  43. <ViewFlipper android:id="@+id/flipper" 
  44.  
  45.         android:layout_width="match_parent" 
  46.  
  47.         android:layout_height="wrap_content" 
  48.  
  49.         android:flipInterval="2000" 
  50.  
  51.          > 
  52.  
  53.                 <TextView 
  54.  
  55.                         android:layout_width="match_parent" 
  56.  
  57.                         android:layout_height="wrap_content" 
  58.  
  59.                         android:gravity="center_horizontal" 
  60.  
  61.                         android:textSize="26sp" 
  62.  
  63.                         android:text="吳建強"/> 
  64.  
  65.                 <TextView 
  66.  
  67.                         android:layout_width="match_parent" 
  68.  
  69.                         android:layout_height="wrap_content" 
  70.  
  71.                         android:gravity="center_horizontal" 
  72.  
  73.                         android:textSize="26sp" 
  74.  
  75.                         android:text="李秀婷"/> 
  76.  
  77.                 <TextView 
  78.  
  79.                         android:layout_width="match_parent" 
  80.  
  81.                         android:layout_height="wrap_content" 
  82.  
  83.                         android:gravity="center_horizontal" 
  84.  
  85.                         android:textSize="26sp" 
  86.  
  87.                         android:text="張美靜"/> 
  88.  
  89.                 <TextView 
  90.  
  91.                         android:layout_width="match_parent" 
  92.  
  93.                         android:layout_height="wrap_content" 
  94.  
  95.                         android:gravity="center_horizontal" 
  96.  
  97.                         android:textSize="26sp" 
  98.  
  99.                         android:text="吳美音"/> 
  100.  
  101.     </ViewFlipper> 
  102.  
  103.    
  104.  
  105.     <TextView 
  106.  
  107.         android:layout_width="match_parent" 
  108.  
  109.         android:layout_height="wrap_content" 
  110.  
  111.         android:layout_marginBottom="5dip" 
  112.  
  113.         android:text="請選擇你喜歡的人" 
  114.  
  115.     /> 
  116.  
  117.    
  118.  
  119.     <Spinner android:id="@+id/spinner" 
  120.  
  121.         android:layout_width="match_parent" 
  122.  
  123.         android:layout_height="wrap_content" 
  124.  
  125.     /> 
  126.  
  127.       
  128.  
  129.      <TextView 
  130.  
  131.         android:id="@+id/target" 
  132.  
  133.         android:layout_width="wrap_content" 
  134.  
  135.         android:layout_height="wrap_content" 
  136.  
  137.         android:textSize="26sp" 
  138.  
  139.         android:text="java語言"/> 
  140.  
  141.    
  142.  
  143.     <TextView 
  144.  
  145.         android:layout_width="match_parent" 
  146.  
  147.         android:layout_height="wrap_content" 
  148.  
  149.         android:layout_marginTop="20dip" 
  150.  
  151.         android:layout_marginBottom="5dip" 
  152.  
  153.         android:text="C#語言" /> 
  154.  
  155.    
  156.  
  157.     <Spinner 
  158.  
  159.         android:id="@+id/spinner1" 
  160.  
  161.         android:layout_width="match_parent" 
  162.  
  163.         android:layout_height="wrap_content" /> 
  164.  
  165. </LinearLayout> 
  166.  

 

Animlayout.xml是動畫文件

  1. <?xml version="1.0" encoding="utf-8"?> 
  2.  
  3. <translate xmlns:android="http://schemas.android.com/apk/res/android"   
  4.  
  5. android:fromXDelta="0"   
  6.  
  7. android:toXDelta="10"   
  8.  
  9. android:duration="1000"   
  10.  
  11. android:interpolator="@anim/cycle_7" /> 
  12.  

 

。。。

 

主程序

 

  1. package wjq.WidgetDemo;  
  2.  
  3.    
  4.  
  5. import android.app.Activity;  
  6.  
  7. import android.os.Bundle;  
  8.  
  9. import android.util.Log;  
  10.  
  11. import android.view.View;  
  12.  
  13. import android.view.View.OnClickListener;  
  14.  
  15. import android.view.animation.Animation;  
  16.  
  17. import android.view.animation.AnimationUtils;  
  18.  
  19. import android.view.animation.Transformation;  
  20.  
  21. import android.view.animation.TranslateAnimation;  
  22.  
  23. import android.widget.AdapterView;  
  24.  
  25. import android.widget.ArrayAdapter;  
  26.  
  27. import android.widget.Spinner;  
  28.  
  29. import android.widget.ViewFlipper;  
  30.  
  31. import android.widget.AdapterView.OnItemSelectedListener;  
  32.  
  33.    
  34.  
  35. /**  
  36.  
  37.  * 動畫Animation示例  
  38.  
  39.  * @author 記憶的永恆  
  40.  
  41.  *  
  42.  
  43.  */ 
  44.  
  45. public class AnimationDemo extends Activity implements OnClickListener,  
  46.  
  47. OnItemSelectedListener {  
  48.  
  49.    
  50.  
  51. private View v;  
  52.  
  53. private String[] mStrings = { "向上", "向右", "穿越",  
  54.  
  55. "旋轉" };  
  56.  
  57.    
  58.  
  59. private static final String[] INTERPOLATORS = { "加速", "Decelerate",  
  60.  
  61. "減速", "左右", "Overshoot",  
  62.  
  63. "Anticipate/Overshoot", "彈回" };  
  64.  
  65. private ViewFlipper mFlipper;  
  66.  
  67. private Spinner spinner;  
  68.  
  69. private Spinner spinner1;  
  70.  
  71. private ArrayAdapter<String> aa;  
  72.  
  73. private ArrayAdapter<String> aa1;  
  74.  
  75. /*  
  76.  
  77.  * (non-Javadoc)  
  78.  
  79.  *   
  80.  
  81.  * @see android.app.Activity#onCreate(android.os.Bundle)  
  82.  
  83.  */ 
  84.  
  85. @Override 
  86.  
  87. protected void onCreate(Bundle savedInstanceState) {  
  88.  
  89. // TODO Auto-generated method stub  
  90.  
  91. super.onCreate(savedInstanceState);  
  92.  
  93. setContentView(R.layout.animationpage);  
  94.  
  95. v = findViewById(R.id.login);  
  96.  
  97. v.setOnClickListener(this);  
  98.  
  99. mFlipper = (ViewFlipper) findViewById(R.id.flipper);  
  100.  
  101.    
  102.  
  103. // 反轉  
  104.  
  105. mFlipper.startFlipping();  
  106.  
  107.    
  108.  
  109. spinner = (Spinner) findViewById(R.id.spinner);  
  110.  
  111.  aa = new ArrayAdapter<String>(this,  
  112.  
  113. android.R.layout.simple_spinner_item, mStrings);  
  114.  
  115. aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
  116.  
  117. spinner.setAdapter(aa);  
  118.  
  119. spinner.setOnItemSelectedListener(this);  
  120.  
  121.    
  122.  
  123. spinner1 = (Spinner) findViewById(R.id.spinner1);  
  124.  
  125.  aa1 = new ArrayAdapter<String>(this,  
  126.  
  127. android.R.layout.simple_spinner_item, INTERPOLATORS);  
  128.  
  129. aa1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
  130.  
  131. spinner1.setAdapter(aa1);  
  132.  
  133. spinner1.setOnItemSelectedListener(this);  
  134.  
  135. }  
  136.  
  137.    
  138.  
  139. @Override 
  140.  
  141. public void onClick(View v) {  
  142.  
  143. Animation shake = AnimationUtils.loadAnimation(this, R.anim.animlayout);  
  144.  
  145. findViewById(R.id.pw).startAnimation(shake);  
  146.  
  147. }  
  148.  
  149.    
  150.  
  151. @Override 
  152.  
  153. public void onItemSelected(AdapterView<?> parent, View view, int position,  
  154.  
  155. long id) {  
  156.  
  157. if (parent.getAdapter()==aa) {  
  158.  
  159. switch (position) {  
  160.  
  161.    
  162.  
  163. case 0:  
  164.  
  165. mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  166.  
  167. R.anim.push_up_in));  
  168.  
  169. mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
  170.  
  171. R.anim.push_up_out));  
  172.  
  173. break;  
  174.  
  175. case 1:  
  176.  
  177. mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  178.  
  179. R.anim.push_left_in));  
  180.  
  181. mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
  182.  
  183. R.anim.push_left_out));  
  184.  
  185. break;  
  186.  
  187. case 2:  
  188.  
  189. mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  190.  
  191. android.R.anim.fade_in));  
  192.  
  193. mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
  194.  
  195. android.R.anim.fade_out));  
  196.  
  197. break;  
  198.  
  199. default:  
  200.  
  201. mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  202.  
  203. R.anim.hyperspace_in));  
  204.  
  205. mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
  206.  
  207. R.anim.hyperspace_out));  
  208.  
  209. break;  
  210.  
  211. }  
  212.  
  213. }  
  214.  
  215.    
  216.  
  217. else {  
  218.  
  219. final View target = findViewById(R.id.target);  
  220.  
  221. final View targetParent = (View) target.getParent();  
  222.  
  223. Animation anm = new TranslateAnimation(0.0f, targetParent  
  224.  
  225. .getWidth()  
  226.  
  227. - target.getWidth()  
  228.  
  229. - targetParent.getPaddingLeft()  
  230.  
  231. - targetParent.getPaddingRight(), 0.0f, 0.0f);  
  232.  
  233.    
  234.  
  235. anm.setDuration(1000);  
  236.  
  237. anm.setStartOffset(300);  
  238.  
  239. anm.setRepeatMode(Animation.RESTART);  
  240.  
  241. anm.setRepeatCount(Animation.INFINITE);  
  242.  
  243.    
  244.  
  245. switch (position) {  
  246.  
  247.             case 0:  
  248.  
  249.              anm.setInterpolator(AnimationUtils.loadInterpolator(this,  
  250.  
  251.                         android.R.anim.accelerate_interpolator));  
  252.  
  253.                 break;  
  254.  
  255.             case 1:  
  256.  
  257.              anm.setInterpolator(AnimationUtils.loadInterpolator(this,  
  258.  
  259.                         android.R.anim.decelerate_interpolator));  
  260.  
  261.                 break;  
  262.  
  263.             case 2:  
  264.  
  265.              anm.setInterpolator(AnimationUtils.loadInterpolator(this,  
  266.  
  267.                         android.R.anim.accelerate_decelerate_interpolator));  
  268.  
  269.                 break;  
  270.  
  271.             case 3:  
  272.  
  273.              anm.setInterpolator(AnimationUtils.loadInterpolator(this,  
  274.  
  275.                         android.R.anim.anticipate_interpolator));  
  276.  
  277.                 break;  
  278.  
  279.             case 4:  
  280.  
  281.              anm.setInterpolator(AnimationUtils.loadInterpolator(this,  
  282.  
  283.                         android.R.anim.overshoot_interpolator));  
  284.  
  285.                 break;  
  286.  
  287.             case 5:  
  288.  
  289.              anm.setInterpolator(AnimationUtils.loadInterpolator(this,  
  290.  
  291.                         android.R.anim.anticipate_overshoot_interpolator));  
  292.  
  293.                 break;  
  294.  
  295.             case 6:  
  296.  
  297.              anm.setInterpolator(AnimationUtils.loadInterpolator(this,  
  298.  
  299.                         android.R.anim.bounce_interpolator));  
  300.  
  301.                 break;  
  302.  
  303.         }  
  304.  
  305.    
  306.  
  307. target.startAnimation(anm);  
  308.  
  309. }  
  310.  
  311.    
  312.  
  313. }  
  314.  
  315.    
  316.  
  317. @Override 
  318.  
  319. public void onNothingSelected(AdapterView parent) {  
  320.  
  321. // TODO Auto-generated method stub  
  322.  
  323.  
  324. }  
  325.  
  326.  
  327. }  

轉自:http://www.cnblogs.com/salam/archive/2010/10/05/1842935.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved