android中Animation動畫的連續播放與播放完畢後停留在最後的狀態
阿新 • • 發佈:2019-02-04
我們做安卓應用的苦逼程式設計師們常常會需要用到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);
}
好多人做動畫的時候會遇到這麼兩個難題(我也曾經遇到過):
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);
}