編輯:關於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的說明如下:
(2)Activity代碼
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動畫設定類中就需要調用對象的屬性設定方法,通過動畫來改變相應屬性。
看完了前面說的幾本書之後,對Linux Kerne
現在的智能手機不敢說百分百的都是觸摸屏,也應該是百分之九九以上為觸摸屏了,觸摸屏為我們操作無鍵盤、無鼠標的手機系統帶來了很多的便利。當用戶觸摸屏幕時會產生很多
背景新項目的一個界面需要用到九宮格界面,每個Item包含一張圖片,下面是對應的文字描述,給每個Item設置點擊監聽器,當點擊時跳轉到相應的界面。於是想到使用Android
Google即將發布的Android7.0的預覽版Android_N為我們增加了許多新的特性,其中包括多窗口的支持、通知欄支持直接回復、網絡數據節省開關、以及新的DOZE