四. View的動畫效果

不忘初心 砥礪前行, Tomorrow Is Another Day !android

相關文章

本文概要:api

  1. 基本使用方式意事項
  2. 複合型動畫使用方式

前言

android動畫分爲View動畫和屬性動畫,View動畫又包括補間動畫和逐幀動畫.因爲如今View動畫基本上不多運用,使用也比較簡單這裏就不在講述.bash

一. 基本使用方式

1.1 方式一: ViewPropertyAnimator

示例代碼ide

view.animate()
                .translationX(Utils.dpToPixel(200))
                .translationY(100)
                .rotation(180)
                .alpha(0.5f)
                .setStartDelay(1000)
                .start();
複製代碼

此方式只適合系統定義的屬性如translationX,translationY等等來快速使用屬性動畫,若是須要一些自定義類型採起方式二.函數

1.2 方式二: ValueAnimator與ObjectAnimator

原理:佈局

  1. ValueAnimator.ofInt()/float/object/PropertyValuesHolder(定義動畫數字區間)
  2. 插值器(隨着時間的流逝,返回當前動畫完成度進度fraction)
  3. 估值器(返回具體數值)
  4. 回調onAnimationUpdate

  1. ObjectAnimator.ofInt()/float/object/ofPropertyValuesHolder(定義動畫對象及數字區間)
  2. 插值器(返回當前動畫完成度進度fraction)
  3. 估值器(返回具體數值)
  4. 拼接"set"+傳入的PropertyName反射回調set方法.

  • 注意事項:
  1. 構造傳入的類型要和估值器返回的類型一致。
    • 當傳入類型是特殊類型時,採用ofObject,而且須要自定義TypeEvaluator估計器.
  2. ObjectAnimator中須要提供get(可選)/set(必須)方法.

示例代碼post

ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 400);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int curValue = (int) animation.getAnimatedValue();
                Log.d(TAG, "onAnimationUpdate: " + curValue);
            }
        });
        valueAnimator.setDuration(2000);
        valueAnimator.setEvaluator(new IntEvaluator());
        valueAnimator.setInterpolator(new LinearInterpolator());
        valueAnimator.start();
        
ObjectAnimator objectAnimator = ObjectAnimator.ofInt("控件對象",
                "屬性名",0,400);
        objectAnimator.setDuration(2000);
        objectAnimator.setEvaluator(new IntEvaluator());
        objectAnimator.setInterpolator(new LinearInterpolator());
        objectAnimator.start();
複製代碼

二. 複合型動畫使用方式

2.1 PropertyValuesHolder與Keyframe

當同一控件多個屬性,能夠實現多個動畫的播放時,也能夠採起以下方式.學習

  • PropertyValuesHolder.ofInt()/float/object/Keyframe:
    至關於對參數屬性名進行封裝保存.
  • Keyframe.ofInt()/float/object:
    實現每一幀的速率(值),至少要設置兩幀.
2.2 AnimatorSet與AnimatorSet.builder
  • playTogether和playSequentially.只負責定時激活控件動畫.動畫

  • play.with.after.before.自由排列動畫順序.ui

  • 當AnimatorSet所設置的函數與單個動畫所設置衝突時,就以AnimatorSet設置爲準。

    • 惟一的例外就是setStartDelay。

AnimatorSet真正激活延時=AnimatorSet.startDelay(延長AnimatorSet的激活時間)+第一個動畫.startDelay

三. 佈局動畫相關

  • layoutAnimation與gridLayoutAnimation :在api 1引入
  • animateLayoutChanges(使用系統默認動畫)與LayoutTransaction(自定義動畫) :在api 11就引入

因爲本人技術有限,若有錯誤的地方,麻煩你們給我提出來,本人不勝感激,你們一塊兒學習進步.

參考連接:

相關文章
相關標籤/搜索