ValueAnimator峭范、objectAnimator的基礎(chǔ)用法

ValueAnimator 的用法

要實(shí)現(xiàn)一個(gè)從0到100的位移動(dòng)畫(huà)径玖,ValueAnimator會(huì)根據(jù)動(dòng)畫(huà)持續(xù)的總時(shí)間產(chǎn)生一個(gè)0~1時(shí)間因子,有了這樣一個(gè)時(shí)間因子纪挎。通過(guò)相應(yīng)的變幻期贫,就可以根據(jù)你的startValue和endValue來(lái)生成相應(yīng)的值。同時(shí)异袄,通過(guò)插值器的使用通砍,我們還可以進(jìn)一步控制每一個(gè)時(shí)間因子它產(chǎn)生值的一個(gè)變化速率。如果我們使用線性插值器烤蜕,那么它生成數(shù)值的時(shí)候封孙,就會(huì)形成一個(gè)線性變化,只要時(shí)間相同讽营,它的增量也相同虎忌。如果我們使用一個(gè)加速度的插值器,那么它的增量變化就會(huì)呈現(xiàn)一個(gè)二次曲線圖橱鹏。增長(zhǎng)率會(huì)越來(lái)越快膜蠢。由于我們的ValueAnimator并不響應(yīng)任何一個(gè)動(dòng)畫(huà)堪藐,也不能控制任何一個(gè)屬性,所以它并沒(méi)有ObjectAnimator使用的那么廣泛挑围。我們還是來(lái)看一下如何在程序中使用ValueAnimator吧庶橱。

        ValueAnimator animator = ValueAnimator.ofInt(start, end);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
              /**
                 * 通過(guò)這樣一個(gè)監(jiān)聽(tīng)事件,我們就可以獲取
                 * 到ValueAnimator每一步所產(chǎn)生的值贪惹。
                 *
                 * 通過(guò)調(diào)用getAnimatedValue()獲取到每個(gè)時(shí)間因子所產(chǎn)生的Value苏章。
                 * */

                //獲取動(dòng)畫(huà)過(guò)程中的漸變值
                int animatedValue = (int) animation.getAnimatedValue();
                Log.w("wangwei", "--->" + animatedValue);
                ViewGroup.LayoutParams layoutParams = last.getLayoutParams();
                layoutParams.height = animatedValue;
                last.setLayoutParams(layoutParams);
            }
        });

        if (mAdapter.getItemCount() > 0) {
            animator.setDuration(300);
            animator.start();
        }

objectAnimator的基礎(chǔ)用法,

如平移奏瞬、旋轉(zhuǎn)枫绅、縮放、漸變以及動(dòng)畫(huà)的集合硼端;至于objectAnimator(必須的有set get方法)和valueAnimator的詳細(xì)區(qū)別也可參考郭霖大神的動(dòng)畫(huà)詳解篇

2并淋、除此基本用法,還有估值器和插值器

(1)插值器:動(dòng)畫(huà)速率的變換珍昨,有點(diǎn)類似物理的加速度县耽,就是該變動(dòng)畫(huà)的速率的

(2)估值器:一般配合插值器使用,插值器返回因子镣典,起始值兔毙,結(jié)束值給估值器,估值器根據(jù)這個(gè)區(qū)間數(shù)據(jù)生成這個(gè)區(qū)間連續(xù)的數(shù)值兄春,而這寫(xiě)數(shù)值就是動(dòng)畫(huà)需要的屬性的值澎剥,使動(dòng)畫(huà)平滑過(guò)渡比如:ValueAnimator.ofFloat()方法就是實(shí)現(xiàn)了初始值與結(jié)束值之間的平滑過(guò)度,那么這個(gè)平滑過(guò)度是怎么做到的呢赶舆?其實(shí)就是系統(tǒng)內(nèi)置了一個(gè)FloatEvaluator哑姚,它通過(guò)計(jì)算告知?jiǎng)赢?huà)系統(tǒng)如何從初始值過(guò)度到結(jié)束值

我們都知道對(duì)于屬性動(dòng)畫(huà)可以對(duì)某個(gè)屬性做動(dòng)畫(huà),而插值器(TimeInterpolator)和估值器(TypeEvaluator)在其中扮演了重要角色芜茵,下面先了解下TimeInterpolator和TypeEvaluator叙量。

TimeInterpolator(時(shí)間插值器):

作用:根據(jù)時(shí)間流逝的百分比計(jì)算出當(dāng)前屬性值改變的百分比。

系統(tǒng)已有的插值器:

①LinearInterpolator(線性插值器):勻速動(dòng)畫(huà)九串。

②AccelerateDecelerateInterpolator(加速減速插值器):動(dòng)畫(huà)兩頭慢绞佩,中間快。

③DecelerateInterpolator(減速插值器):動(dòng)畫(huà)越來(lái)越慢蒸辆。

TypeEvaluator(類型估值算法征炼,即估值器):

作用:根據(jù)當(dāng)前屬性改變的百分比來(lái)計(jì)算改變后的屬性值析既。

系統(tǒng)已有的估值器:

①IntEvaluator:針對(duì)整型屬性

②FloatEvaluator:針對(duì)浮點(diǎn)型屬性

③ArgbEvaluator:針對(duì)Color屬性

那么TimeInterpolator和TypeEvaluator是怎么協(xié)同工作的呢躬贡?

它們是實(shí)現(xiàn)非勻速動(dòng)畫(huà)的重要手段。屬性動(dòng)畫(huà)是對(duì)屬性做動(dòng)畫(huà)眼坏,屬性要實(shí)現(xiàn)動(dòng)畫(huà)拂玻,首先由TimeInterpolator(插值器)根據(jù)時(shí)間流逝的百分比計(jì)算出當(dāng)前屬性值改變的百分比酸些,并且插值器將這個(gè)百分比返回,這個(gè)時(shí)候插值器的工作就完成了檐蚜。比如插值器返回的值是0.5魄懂,很顯然我們要的不是0.5,而是當(dāng)前屬性的值闯第,即當(dāng)前屬性變成了什么值市栗,這就需要估值器根據(jù)當(dāng)前屬性改變的百分比來(lái)計(jì)算改變后的屬性值,根據(jù)這個(gè)屬性值咳短,我們就可以設(shè)置當(dāng)前屬

做了一凡說(shuō)明填帽,直接上代碼:

1、透明度

    RESTART:重新從頭開(kāi)始執(zhí)行咙好。
    REVERSE:反方向執(zhí)行篡腌。

    private void voidstartAlphaAnim(View view) {
        ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1.0f);

        animator.setDuration(3000);

        animator.setRepeatCount(-1);

        animator.setRepeatMode(ValueAnimator.REVERSE);

        animator.start();

    }

位移

private void startTranslationAnimtor(View mView) {

        ObjectAnimator animator = ObjectAnimator.ofFloat(mView, "TranslationX", 0, 500);

        animator.setDuration(3000);

        animator.setRepeatCount(-1);

        animator.setRepeatMode(ValueAnimator.REVERSE);

        animator.start();

    }

縮放

 public static void playAnimationDaShang(View view) {
        AnimatorSet animatorSetPeople = new AnimatorSet();  //多個(gè)動(dòng)畫(huà) 動(dòng)畫(huà)集
        animatorSetPeople.setDuration(1000);
        ObjectAnimator translationX = ObjectAnimator.ofFloat(view, "translationX", -110, 110, 0);
        ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1, 2, 1);//從原始狀態(tài)放大2倍再回到原始狀態(tài)
        ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1, 2, 1);
        translationX.setRepeatCount(-1);//設(shè)置動(dòng)畫(huà)重復(fù)次數(shù)
        translationX.setRepeatMode(ObjectAnimator.RESTART);//動(dòng)畫(huà)重復(fù)模式
        translationX.setStartDelay(1000);//動(dòng)畫(huà)延時(shí)執(zhí)行
        translationX.setInterpolator(new AccelerateInterpolator());//Interpolator可以定義動(dòng)畫(huà)播放的速度
        /*after(Animator anim) 將現(xiàn)有動(dòng)畫(huà)插入到傳入的動(dòng)畫(huà)之后執(zhí)行
after(long delay) 將現(xiàn)有動(dòng)畫(huà)延遲指定毫秒后執(zhí)行
before(Animator anim) 將現(xiàn)有動(dòng)畫(huà)插入到傳入的動(dòng)畫(huà)之前執(zhí)行
with(Animator anim) 將現(xiàn)有動(dòng)畫(huà)和傳入的動(dòng)畫(huà)同時(shí)執(zhí)行*/
        animatorSetPeople.play(translationX).before(scaleX).before(scaleY);
        // animatorSetPeople.playTogether(translationX, scaleX, scaleY);
        animatorSetPeople.start();
        animatorSetPeople.end();
        animatorSetPeople.cancel();


    }
旋轉(zhuǎn)
 /**
     * 旋轉(zhuǎn)動(dòng)畫(huà)
     */

    private void startRotationAnimtor(View mView) {

        ObjectAnimator rotation = ObjectAnimator.ofFloat(mView, "Rotation", 0, 180);

        // rotation.setRepeatCount(-1);

        rotation.setRepeatMode(ValueAnimator.REVERSE);

        rotation.setDuration(2000);

        rotation.start();

    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市勾效,隨后出現(xiàn)的幾起案子嘹悼,更是在濱河造成了極大的恐慌,老刑警劉巖层宫,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杨伙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡萌腿,警方通過(guò)查閱死者的電腦和手機(jī)缀台,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哮奇,“玉大人膛腐,你說(shuō)我怎么就攤上這事《Ψ” “怎么了哲身?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贸伐。 經(jīng)常有香客問(wèn)我勘天,道長(zhǎng),這世上最難降的妖魔是什么捉邢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任脯丝,我火速辦了婚禮,結(jié)果婚禮上伏伐,老公的妹妹穿的比我還像新娘宠进。我一直安慰自己,他們只是感情好藐翎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布材蹬。 她就那樣靜靜地躺著实幕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪堤器。 梳的紋絲不亂的頭發(fā)上昆庇,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音闸溃,去河邊找鬼整吆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辉川,可吹牛的內(nèi)容都是我干的掂为。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼员串,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼勇哗!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起寸齐,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤欲诺,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后渺鹦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體扰法,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年毅厚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了塞颁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吸耿,死狀恐怖祠锣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咽安,我是刑警寧澤伴网,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站妆棒,受9級(jí)特大地震影響澡腾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糕珊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一动分、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧红选,春花似錦澜公、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜕青。三九已至苟蹈,卻和暖如春糊渊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慧脱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工渺绒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人菱鸥。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓宗兼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親氮采。 傳聞我的和親對(duì)象是個(gè)殘疾皇子殷绍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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

  • 【Android 動(dòng)畫(huà)】 動(dòng)畫(huà)分類補(bǔ)間動(dòng)畫(huà)(Tween動(dòng)畫(huà))幀動(dòng)畫(huà)(Frame 動(dòng)畫(huà))屬性動(dòng)畫(huà)(Property ...
    Rtia閱讀 6,153評(píng)論 1 38
  • Animation Animation類是所有動(dòng)畫(huà)(scale、alpha鹊漠、translate主到、rotate)的基...
    四月一號(hào)閱讀 1,916評(píng)論 0 10
  • 1 背景 不能只分析源碼呀,分析的同時(shí)也要整理歸納基礎(chǔ)知識(shí)躯概,剛好有人微博私信讓全面說(shuō)說(shuō)Android的動(dòng)畫(huà)登钥,所以今...
    未聞椛洺閱讀 2,709評(píng)論 0 10
  • 在手機(jī)上去實(shí)現(xiàn)一些動(dòng)畫(huà)效果算是件比較炫酷的事情,因此Android系統(tǒng)在一開(kāi)始的時(shí)候就給我們提供了兩種實(shí)現(xiàn)動(dòng)畫(huà)效果...
    Ten_Minutes閱讀 3,873評(píng)論 3 11
  • 1娶靡、屬性動(dòng)畫(huà)是什么不廢話牧牢,不懂的可以百度一下參考郭霖大神的動(dòng)畫(huà)詳解篇;這里僅僅提供一個(gè)demo說(shuō)說(shuō)用法姿锭,拋磚引玉塔鳍,...
    千涯秋瑟閱讀 1,557評(píng)論 0 0