日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android属性动画 ValueAnimator

發(fā)布時間:2024/9/30 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android属性动画 ValueAnimator 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/zhaoyanjun6/article/details/118699073
本文出自【趙彥軍的博客】

文章目錄

  • ValueAnimator
  • 例子1: 透明度漸變
  • 例子2:倒計時

ValueAnimator

Animator 是一個抽象類

public abstract class Animator implements Cloneable {public void start() {}public void cancel() {}public void end() {}...... }

ValueAnimator

public class ValueAnimator extends Animator implements AnimationHandler.AnimationFrameCallback {}

ValueAnimator是整個屬性動畫機制當(dāng)中最核心的一個類,屬性動畫的運行機制是通過不斷地對值進行操作來實現(xiàn)的,而初始值和結(jié)束值之間的動畫過渡就是由ValueAnimator這個類來負責(zé)計算的。它的內(nèi)部使用一種時間循環(huán)的機制來計算值與值之間的動畫過渡,我們只需要將初始值和結(jié)束值提供給ValueAnimator,并且告訴它動畫所需運行的時長,那么ValueAnimator就會自動幫我們完成從初始值平滑地過渡到結(jié)束值這樣的效果。除此之外,ValueAnimator還負責(zé)管理動畫的播放次數(shù)、播放模式、以及對動畫設(shè)置監(jiān)聽器等,確實是一個非常重要的類。

但是ValueAnimator的用法卻一點都不復(fù)雜,我們先從最簡單的功能看起吧,比如說想要將一個值從0平滑過渡到1,時長300毫秒,就可以這樣寫:

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

怎么樣?很簡單吧,調(diào)用ValueAnimator的ofFloat()方法就可以構(gòu)建出一個ValueAnimator的實例,ofFloat()方法當(dāng)中允許傳入多個float類型的參數(shù),這里傳入0和1就表示將值從0平滑過渡到1,然后調(diào)用ValueAnimator的setDuration()方法來設(shè)置動畫運行的時長,最后調(diào)用start()方法啟動動畫。

用法就是這么簡單,現(xiàn)在如果你運行一下上面的代碼,動畫就會執(zhí)行了??墒沁@只是一個將值從0過渡到1的動畫,又看不到任何界面效果,我們怎樣才能知道這個動畫是不是已經(jīng)真正運行了呢?這就需要借助監(jiān)聽器來實現(xiàn)了,如下所示:

ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); anim.setDuration(300); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float currentValue = (float) animation.getAnimatedValue();Log.d("TAG", "cuurent value is " + currentValue);} }); anim.start();

可以看到,這里我們通過addUpdateListener()方法來添加一個動畫的監(jiān)聽器,在動畫執(zhí)行的過程中會不斷地進行回調(diào),我們只需要在回調(diào)方法當(dāng)中將當(dāng)前的值取出并打印出來,就可以知道動畫有沒有真正運行了。運行上述代碼,控制臺打印如下所示:


從打印日志的值我們就可以看出,ValueAnimator確實已經(jīng)在正常工作了,值在300毫秒的時間內(nèi)從0平滑過渡到了1,而這個計算工作就是由ValueAnimator幫助我們完成的。另外ofFloat()方法當(dāng)中是可以傳入任意多個參數(shù)的,因此我們還可以構(gòu)建出更加復(fù)雜的動畫邏輯,比如說將一個值在5秒內(nèi)從0過渡到5,再過渡到3,再過渡到10,就可以這樣寫:

ValueAnimator anim = ValueAnimator.ofFloat(0f, 5f, 3f, 10f); anim.setDuration(5000); anim.start();

當(dāng)然也許你并不需要小數(shù)位數(shù)的動畫過渡,可能你只是希望將一個整數(shù)值從0平滑地過渡到100,那么也很簡單,只需要調(diào)用ValueAnimator的ofInt()方法就可以了,如下所示:

ValueAnimator anim = ValueAnimator.ofInt(0, 100);

ValueAnimator當(dāng)中最常用的應(yīng)該就是ofFloat()和ofInt()這兩個方法了,另外還有一個ofObject()方法,我會在下篇文章進行講解。

那么除此之外,我們還可以調(diào)用setStartDelay()方法來設(shè)置動畫延遲播放的時間,調(diào)用setRepeatCount()和setRepeatMode()方法來設(shè)置動畫循環(huán)播放的次數(shù)以及循環(huán)播放的模式,循環(huán)模式包括RESTART和REVERSE兩種,分別表示重新播放和倒序播放的意思。這些方法都很簡單,我就不再進行詳細講解了。

例子1: 透明度漸變

把View的 alpha值,從 1 -- 0.4

val progress: ValueAnimator = ValueAnimator.ofFloat(1f, 0.4f)progress.duration = 1000progress.addUpdateListener {val currentValue: Float = it.animatedValue as Floatview.alpha = currentValue } progress.start()

例子2:倒計時

val progress: ValueAnimator = ValueAnimator.ofInt(60, 0) progress.duration = 6000 //6秒 progress.startDelay = 500 progress.interpolator = LinearInterpolator() progress.addUpdateListener {val currentValue: Int = it.animatedValue as Intbutton.text = "$currentValue" } progress.start()

總結(jié)

以上是生活随笔為你收集整理的Android属性动画 ValueAnimator的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。