1. 程式人生 > >android中Animation動畫的連續播放與播放完畢後停留在最後的狀態

android中Animation動畫的連續播放與播放完畢後停留在最後的狀態

我們做安卓應用的苦逼程式設計師們常常會需要用到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);
    }