1. 程式人生 > >Android動畫(三)-動畫框架

Android動畫(三)-動畫框架

概述

上兩篇介紹了一些動畫基礎

Android動畫(一)-檢視動畫

Android動畫(二)-屬性動畫

但是開發中為了開發效率,我們通常是使用一些三方的庫,有前輩已經封裝了很完善的動畫庫,我們學習一下直接用,使用中還能探尋框架作者的設計思路,事半功倍,何樂不為~

1 常見動畫框架

1.1 AndroidViewAnimations

NineOldAnimations一個老牌動畫開源庫了,JakeWharton大神的作品,大神提供的是框架類的思路,沒有Demo,自己用起來還是蠻吃力的,那麼這個事情已經有好人幫我們做了!

程式碼家的AndroidViewAnimations,Github地址:

https://github.com/daimajia/AndroidViewAnimations

他封裝了NineOld,並提供了一大包的動畫效果可以供使用者選用。簡單看下他的Demo。

  mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //1 停掉上一個動畫
if (rope != null) { rope.stop(true); } Techniques technique = (Techniques) view.getTag(); //2 動畫工廠生產YoYo rope = YoYo.with(technique) .duration(1200) .playOn(mTarget); } });

Techniques是一個列舉,列出了目前支援的動畫。工廠類根據這個列舉創建出不同動畫的類。playOn()建立了一個控制類把動畫包裝起來進行控制,並開啟這個動畫。

主要的還是列舉裡面列出的動畫條目,隨便看一個類吧

public class ZoomOutRightAnimator extends BaseViewAnimator {
    @Override
    protected void prepare(View target) {
        ViewGroup parent = (ViewGroup) target.getParent();
        int distance = parent.getWidth() - parent.getLeft();
        getAnimatorAgent().playTogether(
                ObjectAnimator.ofFloat(target, "alpha", 1, 1, 0),
                ObjectAnimator.ofFloat(target, "scaleX", 1, 0.475f, 0.1f),
                ObjectAnimator.ofFloat(target, "scaleY", 1, 0.475f, 0.1f),
                ObjectAnimator.ofFloat(target, "translationX", 0, -42, distance)
        );
    }
}

它內部也是使用AnmitorSet包裹了屬性動畫,並提供了一個動畫基類統一控制。

2 原理解析

佔個坑!