編輯:關於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動畫設定類中就需要調用對象的屬性設定方法,通過動畫來改變相應屬性。

Android源碼 在Ubuntu上下載,編譯和安裝
看完了前面說的幾本書之後,對Linux Kerne
Android 觸摸及手勢操作GestureDetector
現在的智能手機不敢說百分百的都是觸摸屏,也應該是百分之九九以上為觸摸屏了,觸摸屏為我們操作無鍵盤、無鼠標的手機系統帶來了很多的便利。當用戶觸摸屏幕時會產生很多
Android GridViewd 簡單代碼實現
背景新項目的一個界面需要用到九宮格界面,每個Item包含一張圖片,下面是對應的文字描述,給每個Item設置點擊監聽器,當點擊時跳轉到相應的界面。於是想到使用Android
詳解Android N適配要點
Google即將發布的Android7.0的預覽版Android_N為我們增加了許多新的特性,其中包括多窗口的支持、通知欄支持直接回復、網絡數據節省開關、以及新的DOZE