Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android筆記之屬性動畫

Android筆記之屬性動畫

編輯:關於Android編程

前言、動畫分類

如下圖所示,Android的動畫主要分為三種:

\


<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHN0cm9uZz7PwsPmytfPyMu1y7U8L3N0cm9uZz48c3Ryb25nPgo8L3N0cm9uZz48c3Ryb25nPsr00NS2r7utPC9zdHJvbmc+PC9wPgo8cD7L+c69yvTQ1Lavu62hqqGqCr7NysfWuLbUz/O1xMr00NQmIzIwNTQwO7eiyfrBy7Hku6+jrMjnv9i8/s671sO6zc24w/e2yLXIoaM8L3A+CjxwPr7ZwP08c3Ryb25nPqOsz9bU2tKqyrXP1tK7uPawtLz8z8jPwtLGo6zU2dPS0sa1xLavu62hozwvc3Ryb25nPjwvcD4KPHA+PHN0cm9uZz6jqDwvc3Ryb25nPjxzdHJvbmc+MTwvc3Ryb25nPjxzdHJvbmc+o6mx4NC0tq+7rTwvc3Ryb25nPjxzdHJvbmc+eG1sPC9zdHJvbmc+PC9wPgo8cD7TydPa0MK9qGFuZHJvaWS5pLPMtcTKsbryo6zU2nJlc8/Cw+ayosO709DXqMPFt8XWw7avu614bWy1xM7EvP680KOs0vK0y6OsztLDx9DCvajSu7j2YW5pbWF0b3LD+7PGtcTOxLz+vNCho72o0umyu9KqxvCx8LXEw/vX1qOs0vLOqkFEVLbUcmVztcTOxLz+vNDD/MP709C87Mv3uabE3KOsyOfG8GFuaW1hdG9y1eK49sP719a1xMqxuvKjrEFEVL7NxNy4+b7dw/uzxsq2sfCz9tXiuPbKx7avu614bWzOxLz+vNCjrNTaxOPQwr2oeG1stcTKsbryo6y74bj4z+DTprXEuPnUqsvY0aHU8aGjPC9wPgo8cD7I58/CzbzL+cq+o7o8L3A+CjxwPjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140707/2014070708413265.png" alt="\">

動畫XML的代碼如下——



    
    



對動畫xml的說明如下:

  • android:ordering說明一系列動畫動作的執行順序,有兩個選擇,sequentially 和together,順序執行還是一起執行;
  • objectAnimator 是設定動畫實施的對象,duration是該動畫動作執行從開始到結束所用的時間,屬性是y(後面在Activity會講到,這是自己定義的屬性,用來指button的在屏幕中的y坐標值。),屬性值是500,類型是整型。

    2Activity代碼

    public class PropertyActivity extends Activity {
    
    	public final static String TAG = "PropertyActivity";
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_property);
    		
    		final Button moveButton = (Button)findViewById(R.id.move_btn);
    		final Move move = new Move(moveButton);
    		moveButton.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				// 裝載屬性動畫資源
    				AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(PropertyActivity.this,
    					R.animator.property_anim);
    				// 設置要控制的對象
    				set.setTarget(move);
    				// 開始動畫
    				set.start();
    				Log.d(TAG, "getWidth:"+moveButton.getWidth());
    				Log.d(TAG, "Top:"+moveButton.getTop());
    				Log.d(TAG, "getMeasuredWidth:"+moveButton.getMeasuredWidth());
    				Log.d(TAG, "getBottom:"+moveButton.getBottom());
    			}
    		});
    
    	}
    	
    	private class Move{
    		 private int a;
    		 private int y;
    		 private View view;
    		 public Move(View view) {
    			 this.view = view;
    		}
    		 
    		 public int getY()
    			{  
    				return y;
    			}
    			
    			public void setY(int y)
    			{
    				this.y = y;
    				view.layout(view.getLeft(), y, view.getRight(),
    					y + view.getMeasuredHeight());
    			}
    			
    			public int getA()
    			{
    				return a;
    			}
    			
    			public void setA(int a)
    			{
    				this.a = a;
    				
    				Log.d(TAG, "End_getWidth:"+view.getWidth());
    				Log.d(TAG, "End_Top:"+view.getTop());
    				Log.d(TAG, "End_getMeasuredWidth:"+view.getMeasuredWidth());
    				Log.d(TAG, "End_getBottom:"+view.getBottom());
    				view.layout(a, view.getTop(), a + view.getMeasuredWidth(),
    					view.getBottom());
    			}
    	 }
    	
    
    }
    

    我們在程序中Logcat打印出對button位置的具體值。

    Log.d(TAG,"getWidth:"+moveButton.getWidth());

    Log.d(TAG,"Top:"+moveButton.getTop());

    Log.d(TAG,"getMeasuredWidth:"+moveButton.getMeasuredWidth());

    Log.d(TAG,"getBottom:"+moveButton.getBottom());

    結果如下:

    \

    上下高度確實是從0變化到500,實現了移動。

    上面代碼中的屬性x,y都是自己任意取的變量值,在set方法中設置了具體view的高度和寬度,因此,變量名稱是什麼不重要,只要xml與這裡java代碼相符合就行。 get()方法不是必需的,而set方法是必須的,因為

    AnimatorSet動畫設定類中就需要調用對象的屬性設定方法,通過動畫來改變相應屬性。


    以上只是簡單地演示了屬性動畫,實際上這個是從Android 3.0後才出來的,3.0之前有一個很著名的動畫開源項目,名字叫做 Nine Old Androids ,該項目開發了很多屬性動畫, 如下圖所示,不好意思,不會做gif動態圖。大家可以直接在博文後面的鏈接下,裡面有APK和源代碼。值得一讀。



    開源項目Nine Old Androids 資料




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