Android動畫(三)-動畫框架
阿新 • • 發佈:2018-11-17
概述
上兩篇介紹了一些動畫基礎
但是開發中為了開發效率,我們通常是使用一些三方的庫,有前輩已經封裝了很完善的動畫庫,我們學習一下直接用,使用中還能探尋框架作者的設計思路,事半功倍,何樂不為~
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 原理解析
佔個坑!