插值器?估值器募谎?傻傻分不清楚

前言

最近想學(xué)的東西有點(diǎn)多...(潛臺詞:一個(gè)也沒學(xué)~哈哈)待我學(xué)成之后扶关,再出來“裝逼”...

今天整一篇“科普”向的文章,也是我自己一直傻傻分不清的內(nèi)容:插值器数冬、估值器节槐。

正文

一、插值器Interpolator

什么是插值器拐纱?
根據(jù)時(shí)間流失的百分比 計(jì)算當(dāng)前屬性改變的百分比铜异。

使用場景:實(shí)現(xiàn)非線性運(yùn)動(dòng)的動(dòng)畫效果

非線性運(yùn)動(dòng):動(dòng)畫改變的速率不是一成不變的,如加速 & 減速運(yùn)動(dòng)都屬于非線性運(yùn)動(dòng)

動(dòng)畫是我們?nèi)粘9ぷ髦胁豢扇鄙俚囊稽c(diǎn)秸架。如果我們稍加注意就發(fā)發(fā)現(xiàn)默認(rèn)的的動(dòng)畫都是線性的揍庄,而一旦需求有所變動(dòng),比如需要一個(gè)加速度效果的動(dòng)畫东抹。此時(shí)插值器的作用就出現(xiàn)了蚂子。

TimeInterpolator

TimeInterpolator接口是屬性動(dòng)畫中新增的沃测,用于兼容Interpolator接口,因此以后如果自定義插值器直接使用TimeInterpolator就可以了食茎。

TimeInterpolator接口就一個(gè)方法.其中方法中的input表示時(shí)間流逝的百分比, teturn意味著我們自己算法下的屬性改變的百分比蒂破。

public interface TimeInterpolator {
    float getInterpolation(float input);
}

系統(tǒng)內(nèi)置的插值器如下:

作用 資源ID 對應(yīng)的Java類
默認(rèn)的勻速 @android:anim/linear_interpolator LinearInterpolator
逐漸加速 @android:anim/accelerate_interpolator AccelerateInterpolator
先加速再減速 @android:anim/accelerate_decelerate_interpolator AccelerateDecelerateInterpolator
先退后再加速前進(jìn) @android:anim/anticipate_interpolator AnticipateInterpolator
周期運(yùn)動(dòng) @android:anim/cycle_interpolator CycleInterpolator
動(dòng)畫結(jié)束時(shí)抖動(dòng),類似皮球自由落體 DecelerateInterpolator
快速完成動(dòng)畫别渔,超出再回到結(jié)束點(diǎn) @android:anim/overshoot_interpolator OvershootInterpolator
開始的時(shí)候向后甩一點(diǎn)附迷,然后向前 @android:anim/anticipate_overshoot_interpolator AnticipateOvershootInterpolator

自定義插值器

V4包中增加了LookupTableInterpolator、FastOutLinearInInterpolator钠糊、FastOutSlowInInterpolator挟秤、LinearOutSlowInInterpolator如果系統(tǒng)內(nèi)置的插值器不能滿足動(dòng)畫需求可以自定義插值器
自定義插值器

  • 本質(zhì):根據(jù)動(dòng)畫的進(jìn)度(0%-100%)計(jì)算出當(dāng)前屬性值改變的百分比。以怎樣的變化規(guī)律實(shí)現(xiàn)可以參考系統(tǒng)內(nèi)置的插值器實(shí)現(xiàn)或者直接使用上面??提到的網(wǎng)站生成
  • 具體使用:自定義插值器需要實(shí)現(xiàn)Interpolator / TimeInterpolator接口 & 復(fù)寫getInterpolation()抄伍;ttmain中EaseCubicInterpolator就是自定義插值器艘刚,相對比較簡單
//彈性插值器
public class SpringInterpolator implements TimeInterpolator {
    private float factor;//參數(shù)因子
    public SpringInterpolator(float factor) {
        this.factor = factor;
    }
    // 復(fù)寫getInterpolation()
    @Override
    public float getInterpolation(float input) {
        return (float) (Math.pow(2, -10 * input) 
        * Math.sin((input - factor / 4) 
        * (2 * Math.PI) / factor) + 1);
    }
}

二、估值器Evaluator

什么是估值器:根據(jù)當(dāng)前屬性改變的百分比來計(jì)算改變后的屬性值截珍。

插值器決定屬性值隨時(shí)間變化的規(guī)律攀甚;而具體變化屬性數(shù)值則交給估值器去計(jì)算。

TypeEvaluator

一個(gè)允許自定義估值器的類接口岗喉,實(shí)現(xiàn)evaluator()秋度,其中:

  • fractio參數(shù):動(dòng)畫完成度,也就是插值器getInterpolation()的返回,代表當(dāng)前屬性值改變的百分比
  • startValue參數(shù):動(dòng)畫的初始值
  • endValue參數(shù):動(dòng)畫的結(jié)束值
public interface TypeEvaluator<T> {
    public T evaluate(float fraction, T startValue, T endValue);
}

系統(tǒng)內(nèi)置的實(shí)現(xiàn)類

  • IntEvaluator Int類型估值器,返回int類型的屬性改變
  • FloatEvaluator Float類型估值器钱床,返回Float類型屬性改變
  • ArgbEvaluator 顏色類型估值器荚斯,返回16進(jìn)制顏色值

自定義估值器

本質(zhì):根據(jù)插值器計(jì)算出當(dāng)前屬性值改變的百分比 & 初始值 & 結(jié)束值 來計(jì)算此刻屬性變化的具體值

自定義估值器很簡單查牌,這里舉個(gè)勻速估值器的例子:動(dòng)畫進(jìn)行了50%(初始值=100事期,結(jié)束值=200 ),那么勻速插值器計(jì)算出了當(dāng)前屬性值改變的百分比是50%纸颜,那么估值器則負(fù)責(zé)計(jì)算當(dāng)前屬性值 = 100 + (200-100)x50% = 150兽泣。

這里隨便整段代碼,大家感受一下就好了胁孙。如果需求上需要自定義估值器唠倦,方法實(shí)現(xiàn)需要自己根據(jù)業(yè)務(wù)去調(diào)整。

// 實(shí)現(xiàn)TypeEvaluator接口
public class PointEvaluator implements TypeEvaluator<Point> {
    // 復(fù)寫evaluate()
    // 在evaluate()里寫入對象動(dòng)畫過渡的邏輯
    @Override
    public Point evaluate(float fraction, Point startValue, Point endValue) {
        // 根據(jù)fraction來計(jì)算當(dāng)前動(dòng)畫的x和y的值
        int x = (int) (startValue.x + fraction * (endValue.x - startValue.x));
        int y = (int) (startValue.y + fraction * (endValue.y - startValue.y));
        // 將計(jì)算后的坐標(biāo)封裝到一個(gè)新的Point對象中并返回
        return new Point(x, y);
    }
}

三涮较、總結(jié)

插值器和估值器關(guān)系

屬性動(dòng)畫是對屬性做動(dòng)畫稠鼻,屬性要實(shí)現(xiàn)動(dòng)畫。

  • 1狂票、首先由插值器根據(jù)時(shí)間流逝的百分比計(jì)算出當(dāng)前屬性值改變的百分比枷餐,然后由插值器將這個(gè)百分比返回。這個(gè)時(shí)候插值器的工作就完成了。

比如 插值器 返回的值是0.5毛肋,很顯然我們要的不是0.5

  • 插值器算好屬性變化百分比之后,由估值器根據(jù)當(dāng)前屬性改變的百分比來計(jì)算改變后的屬性值屋剑,根據(jù)這個(gè)屬性值润匙,我們就可以對View設(shè)置當(dāng)前的屬性值了。

尾聲

OK唉匾,關(guān)于插值器和估值器我想聊的就是這么多孕讳,很簡單很簡單的內(nèi)容。就當(dāng)日常查缺補(bǔ)漏巍膘,碎片時(shí)間下的一點(diǎn)點(diǎn)提升吧~~

我是一個(gè)應(yīng)屆生厂财,最近和朋友們維護(hù)了一個(gè)公眾號,內(nèi)容是我們在從應(yīng)屆生過渡到開發(fā)這一路所踩過的坑峡懈,以及我們一步步學(xué)習(xí)的記錄璃饱,如果感興趣的朋友可以關(guān)注一下,一同加油~

個(gè)人公眾號:咸魚正翻身
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肪康,一起剝皮案震驚了整個(gè)濱河市荚恶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌磷支,老刑警劉巖谒撼,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雾狈,居然都是意外死亡廓潜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門善榛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辩蛋,“玉大人,你說我怎么就攤上這事锭弊】芭欤” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵味滞,是天一觀的道長樱蛤。 經(jīng)常有香客問我,道長剑鞍,這世上最難降的妖魔是什么昨凡? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蚁署,結(jié)果婚禮上便脊,老公的妹妹穿的比我還像新娘。我一直安慰自己光戈,他們只是感情好哪痰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布遂赠。 她就那樣靜靜地躺著,像睡著了一般晌杰。 火紅的嫁衣襯著肌膚如雪跷睦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天肋演,我揣著相機(jī)與錄音抑诸,去河邊找鬼。 笑死爹殊,一個(gè)胖子當(dāng)著我的面吹牛蜕乡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梗夸,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼层玲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绒瘦?” 一聲冷哼從身側(cè)響起称簿,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惰帽,沒想到半個(gè)月后憨降,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡该酗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年授药,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呜魄。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悔叽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爵嗅,到底是詐尸還是另有隱情娇澎,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布睹晒,位于F島的核電站趟庄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伪很。R本人自食惡果不足惜戚啥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锉试。 院中可真熱鬧猫十,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至江兢,卻和暖如春昨忆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杉允。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留席里,地道東北人叔磷。 一個(gè)月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像奖磁,于是被迫代替她去往敵國和親改基。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容