Android5.0新特性之——控件移動動畫(初級)
最近開發,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的屬性值。
如有不足之處,請各位大牛進行指導
我的博客即將入駐“云棲社區”,誠邀技術同仁一同入駐。
我的博客即將搬運同步至騰訊云+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=11fyo5nbpnz79