1. 程式人生 > >android 動畫 屬性動畫 ValueAnimator

android 動畫 屬性動畫 ValueAnimator

屬性動畫2  Property Animation

ValueAnimator(差值動畫)

單純從字面上理解的話ObjectAnimator作用於某個實際的物件,而ValueAnimatorObjectAnimator的父類,它繼承自抽象類Animator,它作用於一個值,將其由一個值變化為另外一個值,然後根據值的變化,按照一定的規則,動態修改View的屬性,比如View的位置、透明度、旋轉角度、大小等,即可完成了動畫的效果。

/*
    這裡通過ofFloat()方法構造一個ValueAnimator例項,除此之外還提供了
    其他函式ofInt()ofObject()ofPropertyValuesHolder()
函式,     api 21之後又提供了ofArgb(),每個函式都是可以傳入多個改變值。  */ public void initAnim() {     ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 126512.36f);     valueAnimator.setDuration(2000);     valueAnimator.setInterpolator(new LinearInterpolator());     valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {        
@Override         public void onAnimationUpdate(ValueAnimator animation) {             float money = (float) animation.getAnimatedValue();             mTextView.setText(String.format("%.2f", money));         }     });     valueAnimator.start(); }

Interpolator

//如何自定義一個插值器?舉例:我們實現一個先減速後加速插值器,程式碼如下
public class 
DecelerateAccelerateInterpolator implements Interpolator {     @Override     public float getInterpolation(float input) {         float result;         if (input <= 0.5f) {             result = (float) (Math.sin(Math.PI * input)) / 2.0f;         } else {             result = (float) (2 - Math.sin(Math.PI * input)) / 2.0f;         }         return result;     } }

TypeEvaluator

//TypeEvaluator(估值器)
/*
TypeEvaluator用於根據當前屬性改變的百分比來計算改變後的屬性值,系統提供瞭如下幾種估值器
IntEvaluator 針對整型屬性
IntArrayEvaluator 針對整型屬性集合
FloatEvaluator 針對浮點型屬性
FloatArrayEvaluator 針對浮點型屬性集合
ArgbEvaluator  針對Color屬性
RectEvaluator 針對Rect屬性
PointFEvaluator 針對PointF屬性
*/
// 介面提供了evaluate(float fraction, T startValue, T endValue);
// 動畫在執行過程中Interpolator自動計算出動畫執行的百分比fraction// 然後TypeEvaluator根據fraction計算出當前動畫的屬性值。
public class FloatEvaluator implements TypeEvaluator<Number> {
    public Float evaluate(float fraction, Number startValue, Number endValue) {
        float startFloat = startValue.floatValue();
        return startFloat + fraction * (endValue.floatValue() - startFloat);
    }
}

自定義TypeEvaLuator

//如何自定義TypeEvaLuator?比如我們要實現一個錢的增加,字型顏色越紅的動畫,
// 我們現在都知道可以使用ofArgb(),但是ofArgb()需要api 21以上才能使用,
// 所以需要我們自定義一個ArgbEvaLuator,這裡為了演示自定義
// TypeEvaluator直接把api 21中提供的ArgbEvaluator原始碼拿來使用
public class TextArgbEvaluator implements TypeEvaluator {

    public Object evaluate(float fraction, Object startValue, Object endValue) {
        int startInt = (Integer) startValue;
        int startA = (startInt >> 24) & 0xff;
        int startR = (startInt >> 16) & 0xff;
        int startG = (startInt >> 8) & 0xff;
        int startB = startInt & 0xff;

        int endInt = (Integer) endValue;
        int endA = (endInt >> 24) & 0xff;
        int endR = (endInt >> 16) & 0xff;
        int endG = (endInt >> 8) & 0xff;
        int endB = endInt & 0xff;

        return (int) ((startA + (int) (fraction * (endA - startA))) << 24) |
                (int) ((startR + (int) (fraction * (endR - startR))) << 16) |
                (int) ((startG + (int) (fraction * (endG - startG))) << 8) |
                (int) ((startB + (int) (fraction * (endB - startB))));
    }
}

呼叫方式

//呼叫方式:
public void ss() {
    AnimatorSet animatorSet = new AnimatorSet();
    ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 126512.36f);
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float money = (float) animation.getAnimatedValue();
            Log.e("Interpolator", "money---->" + money);
            mTextView.setText(String.format("%.2f", money));
        }
    });

    int startColor = Color.parseColor("#FCA3AB");
    int endColor = Color.parseColor("#FB0435");
    ValueAnimator colorAnimator = ValueAnimator.ofObject(new TextArgbEvaluator(), startColor, endColor);
    colorAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            int color = (int) animation.getAnimatedValue();
            Log.e("Interpolator", "color---->" + color);
            mTextView.setTextColor(color);
        }
    });

    animatorSet.playTogether(valueAnimator, colorAnimator);
    animatorSet.setDuration(5000);
    animatorSet.setInterpolator(new LinearInterpolator());
    animatorSet.start();
}

相關推薦

android 動畫 屬性動畫 ValueAnimator

屬性動畫2  Property Animation ValueAnimator(差值動畫) 單純從字面上理解的話ObjectAnimator作用於某個實際的物件,而ValueAnimator是Obje

android屬性動畫 ObjectionAnimation

   關於動畫:  android中動畫包括 View Animation、Drawable Animation和屬性動畫Property Animation      ●

Android屬性動畫(基本用法)

1、前言 在我們體驗一款APP時,炫酷的動畫往往能讓使用者體驗大幅度提升。想當年我剛學Android的時候,無意中看到蘑菇街購物車的動畫效果,把我給激動得,非要在自己的APP中加入那動畫,記得當時用費了好大的勁...不提了,說多了都是淚... 先了解下,目前可以實現動畫的

Android Interpolator屬性動畫解析

Interpolator的用法 Interpolator這個東西很難進行翻譯,直譯過來的話是補間器的意思,它的主要作用是可以控制動畫的變化速率,比如去實現一種非線性運動的動畫效果。那麼什麼叫做非線性運動的動畫效果呢?就是說動畫改變的速率不是一成不變的,像加速運

android初識屬性動畫---Interpolator插值器

nterpolator屬性是Animation類的一個XML屬性,所以alpha、scale、rotate、translate、set都會繼承得到這個屬性。Interpolator被譯為插值器,其實我不大能從字面上理解為什麼會這樣譯,其實他是一個指定動畫如何變化

Android屬性動畫和補間動畫的區別

 屬性動畫和補間動畫的區別是,補間動畫只是表面上實現了平移,旋轉,漸變,縮放,實際上屬性值不變;  屬性動畫實現平移,旋轉,漸變,縮放後,屬性值變了  下面就是測試的例子 程式碼: package com.atguigu.propertyanimation; impor

android屬性動畫的bug,以及ViewCompat

ViewCompat這個類,是andorid對於動畫類操作的相容類,今天寫了一個側拉框,出現的一個bug    今天一不小心遇見一個bug,這個bug如下 正常情況下慢慢畫動畫可以用,但是快速化,動畫就停止了, 今天先貼程式碼,明天貼圖 final CycleInte

Android動畫--屬性動畫總結(一)

屬性動畫是API 11 才引入的新特性,屬性動畫彌補了view動畫的一些不足。屬性動畫可以針對屬性進行動畫而不僅僅是View。 但並不是傳遞任何的屬性都能有效果。屬性動畫要求做動畫的物件提供該屬性的get和set方法,屬性動畫根據外界傳遞的該屬性的初始值和最終值,以動畫的效果多次呼叫set

Android 安卓動畫 屬性動畫

目錄 引入 佈局檔案 篇 程式碼邏輯 篇 引入 屬性動畫的出現,彌補了補間動畫的不足之處,補間動畫,只是改變了表面上的東西,但是其中屬性並未改變,而屬性動畫相反,改變了表面上的東西,並且也更改了其屬性。 類:ObjectAnimator 用於操作屬性動畫的類

展開拉伸動畫---屬性動畫

最近有一個需求是一個介面上點選一個按鈕,開啟一個需要顯示的View,然後再次點選隱藏,先看效果圖 展開前的介面 展開後的介面 實現原理,就是在佈局檔案中先把,需要顯示出來的View寫出來,然後再用屬性動畫動態的控制高度,從而實現點選展開和關閉的動畫

Android屬性動畫完全解析 中 ,ValueAnimator和ObjectAnimator的高階用法

轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章當中,我們學習了Android屬性動畫的基本用法,當然也是最常用的一些用法,這些用法足以覆蓋我們平時大多情況下的動畫需求了。但是,正如上篇文章當中所

Android屬性動畫完全解析(中),ValueAnimator和ObjectAnimator的高階用法

大家好,在上一篇文章當中,我們學習了Android屬性動畫的基本用法,當然也是最常用的一些用法,這些用法足以覆蓋我們平時大多情況下的動畫需求了。但是,正如上篇文章當中所說到的,屬性動畫對補間動畫進行了很大幅度的改進,之前補間動畫可以做到的屬性動畫也能做到,補間動畫做不到的現在

Android 屬性動畫ObjectAnimator和ValueAnimator講解

區別:   ObjectAnimator 是直接對某個view進行更改。   ValueAnimator 根據 TimeInterpolator 在不斷產生相應的資料,來傳進view  ,view自己做改變。 介紹:   1.屬性動畫是通過改變某個控制元件的屬性值來創造動畫,比如在規定的時間

Android屬性動畫(ObjectAnimator、PropertyValuesHolder、ValueAnimator、AnimatorSet)

Android屬性動畫   在Animator 框架中,使用最多的就是AnimatorSet和ObjectAnimator配合,使用ObjectAnimator進行更加精細的控制,只控制一個物件的一個屬性值,爾斯用多個ObjectAnimator組合到Anim

Android Animation、ObjectAnimator與ValueAnimator實現檢視動畫屬性動畫

一、檢視動畫 檢視動畫比較簡單,它提供了AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation四種動畫方式。 檢視動畫一個非常大的缺陷就是不具有互動性,當一個View發生檢視動畫後,其

Android屬性動畫完全解析 ValueAnimator

android 屬性動畫完全解析,初識屬性動畫的基本用法:在手機上去實現一些動畫效果算是件比較炫酷的事情,因此Android系統在一開始的時候就給我們提供了兩種實現動畫效果的方式,逐幀動畫(frame-by-frame animation)和補間動畫(tweened anim

Android 屬性動畫框架 ObjectAnimator、ValueAnimator ,這一篇就夠了

前言 我們都知道 Android 自帶了 Roate Scale Translate Alpha 多種框架動畫,我們可以通過她們實現豐富的動畫效果,但是這些寬家動畫卻有一個致命的弱點,它們只是改變了 View 顯示的大小,而沒有改變 View 的響應區域。這時以 ObjectAnimator、ValueAni

Android屬性動畫完全解析(上),初識屬性動畫的基本用法

fcm 操作 fad 擴展性 改變 內部使用 如果 轉載 @override 轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/43536355 在手機上去實現一些動畫效果算是件比較炫酷的事情,因此Andr

Android 屬性動畫(Property Animation) 全然解析 (上)

顏色 valid 全部 加速度 ext target ng- 點擊 save 轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/380674751、概述Android提供了幾種動畫類型:View Anima

Android圖文具體解釋屬性動畫

ref processor 拷貝 number name rup prop ren del Android中的動畫分為視圖動畫(View Animation)、屬性動畫(Property Animation)以及Drawable動畫。從Android 3