Android自定義加載動畫

準備做一個Android自定義加載動畫的合集,主要通過自定義View實現一些常見的加載動畫,也會模仿一些主流APP好看的加載動畫。項目源碼同步上傳到了個人github上,歡迎大家star,fork,提issues,一起交流進步。

目前實現了幾種效果,以後會陸續加入其他效果:

這裏寫圖片描述

通過動畫可以實現一些絢麗的效果,平時我們在使用過程中,有幾點需要咱注意一下:

1.OOM的問題:
這個問題主要出現在幀動畫上,Frame(幀動畫)是通過順序播放一系列圖像從而產生動畫的效果,可以簡單理解爲圖像切換動畫。很明顯,當圖片數量過多並且圖片過大的時候,就極容易出現OOM的現象。之前我在項目中就遇到過這種情況:

Android性能優化之Bitmap導致的內存溢出

所以在實際項目開發中應該儘量避免使用幀動畫,對於那些配置低,內存小的手機很容易出現內存溢出的情況導致應用崩潰。

2.無限循環動畫的問題:

這個問題主要出現在屬性動畫來實現無限循環,很常見的就是加載動畫。如果當前Activity正在使用無限循環動畫,退出當前Activity或者將當前Activity切入後臺時,沒有及時結束動畫。可能會導致Activity無法釋放從而導致內存泄漏。解決辦法就是在自定義的加載動畫中進行判斷:

    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
        if (!hasWindowFocus) {
            endAnimation();
        }
    }

    @Override
    protected void onWindowVisibilityChanged(int visibility) {
        super.onWindowVisibilityChanged(visibility);
        if (visibility != VISIBLE) {
            endAnimation();
        }
    }

在退出當前Activity或者將當前Activity切入後臺時,結束動畫,這樣及時釋放Activity,防止內存溢出。

3.Handler的問題

Android動畫中,儘量少用Handler來實現異步任務,因爲使用Handler如果處理不當,很容易造成內存泄露。其實Android動畫中已經封裝好了處理異步任務的方法:

public void postInvalidateDelayed(long delayMilliseconds) {}

關於無限循環動畫可以設置重複次數,然後添加動畫監聽,在動畫重複時進行操作:

       valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
       valueAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
            }

            @Override
            public void onAnimationEnd(Animator animation) {
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
               //處理動畫循環業務
            }
        });

4.硬件加速
複雜的動畫建議開啓硬件加速,提高動畫的流暢性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章