我們做安卓應用的苦逼程序員們常常會需要用到Animation也就是動畫。比如做地圖功能的時候。我們在手機旋轉時需要根據手機重力感應來調整地圖的角度,讓它上面的“北”一直指向地球的北面。。。
好多人做動畫的時候會遇到這么兩個難題(我也曾經遇到過):
1:動畫執行完了一遍后又立刻恢復到了初始狀態,或者動畫只能不斷循環動作。【問題:我想讓動畫動到某個位置或轉到某個角度后停在那里,該如何做呢?】
2:點擊按鈕一、動畫從0度轉到了10度,我再點擊按鈕二、需要動畫從之前的10度位置再繼續轉到20度。再點擊按鈕三......【問題:如何讓動畫連續起來?而不是每次都有從0度開始轉到10、再從0度開始轉到20度......】
針對上面兩個問題我們來看看動畫類,這里我拿RotateAnimation(旋轉動畫,其他動畫有類似之處)來講解:
RotateAnimation(float fromDegrees,float toDegtees,float pivotX,float pivotY);
這里面 :
fromDegrees為旋轉動畫的起始角度
toDegtees為旋轉動畫的結束角度
pivotX和pivotY為旋轉動畫的錨點位置,也就是說我的動畫是根據哪個頂點來旋轉的。
從參數來看,我們只要在一次動畫執行完畢后記錄當前動畫轉到了哪里,再在下次執行動畫的時候將這個記錄下來的位置傳給fromDegrees就會發現你的動畫接着上次的位置繼續旋轉了下去。這樣我們就解決了問題2了。
再看看問題1:想讓動畫執行完畢后固定在動畫結束的那一幀上可以設置rotateAnimation.setFillAfter(true);方法。將值傳為true就可以了。。。
/**旋轉的動畫 * @param mView 需要選擇的View * @param startDegress 初始的角度【從這個角度開始】 * @param degrees 當前需要旋轉的角度【轉到這個角度來】 */ public void showAnimation(View mView,int startDegress,int degrees) { float centerX = mView.getWidth() / 2.0f; float centerY = mView.getHeight() / 2.0f; //這個是設置需要旋轉的角度(也是初始化),我設置的是當前需要旋轉的角度 RotateAnimation rotateAnimation = new RotateAnimation(startDegress,degrees,centerX,centerY);//centerX和centerY是旋轉View時候的錨點 //這個是設置動畫時間的 rotateAnimation.setDuration(10); //動畫執行完畢后是否停在結束時的角度上 rotateAnimation.setFillAfter(true); //啟動動畫 mView.startAnimation(rotateAnimation); }
From:http://blog.csdn.net/zhtqmima/article/details/12910871
