1. 程式人生 > >Android屬性動畫個人小結

Android屬性動畫個人小結

ValueAnimator

ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);  
anim.setDuration(300);  
anim.start(); 

以上幾句的意思就是做一個從0f到1f的平滑過渡,類似數字計時。因為沒有和任何View聯絡在一起,所以不會有任何實際顯示動畫效果。

ObjectAnimator

ObjectAnimator繼承自ValueAnimator

private void executeAnimation() {
        float curTranslationX = mImageView.getTranslationX();
        ObjectAnimator animator = ObjectAnimator.ofFloat(mImageView, "translationY"
, curTranslationX, 500f); animator.setDuration(1000); animator.start(); }

上面的程式碼意思是把這個ImageView 從它的當前位置Y軸向下移動。後面的引數可以多跟幾個,如:

        ObjectAnimator animator = ObjectAnimator.ofFloat(mImageView, "translationY", curTranslationX, 500f, 0f, 100f);

那麼這裡就是先向下移動500f,再移動回初始位置,再向下移動100f。

以上程式碼也可以使用ValueAnimator來完成:

float curTranslationX = mImageView.getTranslationX();
        ValueAnimator anim = ValueAnimator.ofFloat(curTranslationX, 500f);
        anim.setDuration(1000);
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                mImageView.setTranslationY((float
)animation.getAnimatedValue()); } }); anim.start();

可見,根據animation的value值來更新View的屬性,達到動畫效果。這裡我們呼叫的是setTranslationY,也可以同時呼叫setTranslationX、setAlpha、setTop、setRoation等等。同時設定幾個值,就會同時執行不同種類的動畫。

利用AnimatorSet組合動畫

這個就不說了,網上隨便搜一下就有,示例程式碼:

ObjectAnimator moveIn = ObjectAnimator.ofFloat(textview, "translationX", -500f, 0f);  
ObjectAnimator rotate = ObjectAnimator.ofFloat(textview, "rotation", 0f, 360f);  
ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);  
AnimatorSet animSet = new AnimatorSet();  
animSet.play(rotate).with(fadeInOut).after(moveIn);  
animSet.setDuration(5000);  
animSet.start(); 

使用TypeEvaluator

通過定義TypeEvaluator可以自己定義動畫的執行方式

    private void executeAnimation() {
        float curTranslationY = mImageView.getTranslationY();
        ValueAnimator anim = ValueAnimator.ofObject(new MyTypeEvaluator(), curTranslationY, 100.0f);
        anim.setDuration(1000);
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                mImageView.setTranslationY((float) animation.getAnimatedValue());
            }
        });
        anim.start();
    }

    class MyTypeEvaluator implements TypeEvaluator<Float> {
        @Override
        public Float evaluate(float fraction, Float startValue, Float endValue) {
            float startFloat = startValue.floatValue();
            return startFloat + 0.5f * (fraction * fraction) *(9.8f) *     (endValue.floatValue() - startFloat);
        }
    }

以上,模擬一個自由落體動畫。自定義類裡面的fraction表示動畫執行的進度,配合這個進度,用公式表達出一個自由落體(公式是瞎JB寫的)。這個返回值就是動畫執行過程中不停更新的value值。我們通過設定監聽,實時通過setTranslationY更新view的位置。

注意,evaluate方法的返回值是一個Object,這裡我利用泛型規定為float,這個返回可以是任意物件。比如某些例子裡面返回的是一個point物件,其中可以攜帶x和y兩個位置資訊。那麼我們在ValueAnimator.ofObject裡面傳入的引數也應該是兩個point,代表動畫執行過程中,這個point從point1漸漸變成了point2。如:

Point point1 = new Point(0, 0);  
Point point2 = new Point(300, 300);  
ValueAnimator anim = ValueAnimator.ofObject(new PointEvaluator(), point1, point2);  
anim.setDuration(5000);  
anim.start(); 

使用ViewPropertyAnimator

直接對某個View呼叫animate()。返回一個ViewPropertyAnimator物件。然後在對這個物件進行操作,示例:
imageView.animate().scaleX(30.0f).scaleY(30.0f).setDuration(300).start();
這句的意思是對該view進行放大操作。一連串的呼叫,每次返回的還是ViewPropertyAnimator物件。這個不知道是不是在使用裝飾模式?可以研究一下原始碼判斷。

總結:
我在使用屬性動畫的過程中,覺得還是不能方便的、隨心所欲的控制。有時候不得不建立好幾個動畫,在A執行完後(使用監聽器監聽結束),再去開啟另一段動畫。程式碼上非常冗長,可讀性較差。後面需要繼續探究其靈活簡便的用法。

相關推薦

Android屬性動畫個人小結

ValueAnimator ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); anim.setDuration(300); anim.start(); 以上幾句的意思就是做一個從0f到1f的

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屬性動畫.

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

Android屬性動畫深入分析 讓你成為動畫牛人

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android 屬性動畫(Property Animation) 完全解析 (上)【轉】

轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/38067475 1、概述 Android提供了幾種動畫型別:View Animation 、Drawable Animation 、Property Anima

android 屬性動畫之 ObjectAnimator

一、ObjectAnimator展示單個動畫效果 1、translate //view從原始位置減速下移500,無限迴圈 private void translationY1(View view) { ObjectAnimator animator

Android屬性動畫卡頓的優化

在開發時,在聊天室內用到屬性動畫,時間久了卡頓,先看一下效果圖: 禮物動畫是 SVGA 動畫和屬性動畫配合使用,才達到這樣的效果;這是在聊天室內,會不停的刷這種禮物,在測試時,刷到70個左右,出現明顯的卡頓現象; 為了解決卡頓的問題,去搜了挺多,最終找到了解決的方法; 先看我之前的

Android屬性動畫的用法

Android中動畫的實現方式有三種:屬性動畫、補間動畫、逐幀動畫。其中屬性動畫是指在一定的時間間隔內,通過對給予物件的屬性值的改變而達到動畫效果,相比於其他兩種動畫方式,其靈活性要大很多。而補間動畫的實現,通常是侷限於view物件,而且並不能改變view的屬性,只是通過改變視覺效果來達到動畫效

Android屬性動畫原始碼解析

屬性動畫是Android開發中常用的知識,網上大多數文章都是基於屬性動畫的用法來解說的,本文基於屬性動畫的原始碼,從原始碼角度去一探屬性動畫的究竟。 屬性動畫有兩個非常重要的類,分別是ObjectAnimator和ValueAnimator,其中前者繼承了後者,前者是對屬性動畫的api提供了

Android屬性動畫用法總結

Android 3.0提供了屬性動畫,幾乎可以代替補間動畫。屬性動畫用法更加簡潔,功能更多強大。使用屬性動畫的兩個類是ValueAnimator和ObjectAnimator。 ValueAnaimator使用示例 ValueAnimator valueAn

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

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

Android屬性動畫完全解析 下 ,Interpolator和ViewPropertyAnimator的用法

                大家好,歡迎繼續回到Android屬性動畫完全解析。在上一篇文章當中我們學習了屬性動畫的一些進階技巧,包括ValueAnimator和ObjectAnimator的高階用法,那麼除了這些之外,當然還有一些其它的高階技巧在等著我們學習,因此本篇文章就對整個屬性動畫完全解析系列收個

Android : 屬性動畫

先在res寫一個animator資料夾 建立一個set檔案 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"

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

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

Android 屬性動畫ObjectAnimator和ValueAnimator講解

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

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

補間動畫 補間動畫,主要是向View物件設定動畫效果,包括AlphaAnimation 、RotateAnimation 、ScaleAnimation 、TranslateAnimation 這4種效果,對應的xml標籤分別是alpha、rotate、scale、tr

Android屬性動畫上手實現各種動畫效果,自定義動畫,拋物線等

在上一篇Android基礎動畫,組合動畫,幀動畫,佈局動畫,Activity跳轉動畫中我寫了基礎動畫的用法,那麼這次我們來看Android屬性動畫上手實現各種效果,包括實現基本的透明度,縮放,平

Android 屬性動畫 常用方法 與 插值器 Interpolator

轉載於。加了點自己的修改 ViewPropertyAnimator 使用方法 view.animate().translationX(500); 具體可以跟的方法以及方法所對應的 View 中的實際操作的方法如下圖所示:

Android 屬性動畫詳解,屬性動畫基本用法!

Hello,大家好,今天要給大家講的是Android 屬性動畫詳解! 在Tween動畫的討論中,我們提到在Android中動畫可以分為三類:①幀動畫②Tween(補間動畫)③Property Anim