最近開發,UI大牛們設計了好多很炫酷吊炸天的動畫,不由得重新學習了一下5.0的ObjectAnimator動畫。
ObjectAnimator動畫的原理,通過反射控制項的setXXX方法,改變控制項的實際屬性值,來達到控制項狀態改變的動畫效果。
首先話不多說,先上。
我們先介紹幾個示範效果中用到的ObjectAnimator的方法
我這裡只針對ofInt()和ofFlot方法進行說明,其他的方法原理類似,這裡不做過多說明。
首先是第一個字型變色的效果。這裡用的是ofInt方法。代碼比較簡單:
//設定色值 ObjectAnimator textColorAnim = ObjectAnimator.ofInt(view, "textColor", 0xff000000, 0xff0000ff, 0xff00ff00); //設定動畫時間 textColorAnim.setDuration(3000); //設定重複模式 textColorAnim.setRepeatMode(ValueAnimator.REVERSE); textColorAnim.start();
這裡需要說明一點,我定義的view,是Button類型的控制項,所以裡面是有setTextColor這個屬性的。其中可以看出我設定的是黑、藍、綠三個顏色。但是我的是有很多種顏色的變化,這是因為在從藍色到綠色進行過度的時候,中間做了補間色的轉變。具體的可以百度一下色盤。
第二個我們說一下ofFloat()方法,原理依然是設定控制項,通過反射到控制項的setXXX方法,對控制項的屬性變更。下面上代碼:
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(btnRotationX, "rotationX", 0, 360);objectAnimator.setDuration(3000);objectAnimator.start();
這裡說明一下,首先,在華為mate8和mate7系統下,控制項的setRotationX方法和setRotationY這兩個方法調用,會有問題。一旦調用,就會出現控制項消失的情況。這裡是華為系統的問題。不做過多的介紹。也就是如果在華為mate8和mate7系統下,調用這個動畫,展示動畫的控制項,就會出現消失的問題。所以這裡慎用!!!!!
最後說一個進階用法,自訂控制項的動畫效果。也就是中的最後一個效果。
直接貼代碼:
首先是自訂控制項CustomView(這裡為了節省篇幅,構造方法沒有粘貼)
public class CustomView extends android.support.v7.widget.AppCompatTextView { private float redR=0; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.FILL); paint.setAntiAlias(true); canvas.drawCircle(200,20,redR, paint); } public void setRedR(float redR) { this.redR = redR;
//強制重新整理頁面 invalidate(); }}
布局檔案:
就不貼代碼了,不同的目錄下,控制項的引用方式也是不一樣的。這裡提醒一下,記得寫上控制項的寬高,我寫的高是100dp,寬是全屏。
動畫代碼:
ObjectAnimator redR = ObjectAnimator.ofFloat(custom, "redR", 0, 100); redR.setDuration(3000); redR.setRepeatCount(ValueAnimator.INFINITE); redR.setRepeatMode(ValueAnimator.REVERSE); redR.start();
自訂控制項,就是通過映射custom的setRedR方法,進行動態更改custom的屬性值。
如有不足之處,請各位大牛進行指導