控件拋物線軌跡的實(shí)現(xiàn)

寫這篇文章的初衷也是加強(qiáng)對(duì)插值器和估值器的記憶婉徘。

其實(shí)對(duì)于插值器和估值器來(lái)說(shuō),除了系統(tǒng)提供的以外敬矩,我們可以自定義概行。實(shí)現(xiàn)方式也很簡(jiǎn)單。因?yàn)椴逯灯骱凸乐灯鞫贾皇且粋€(gè)接口弧岳。并且內(nèi)部只有一個(gè)方法凳忙。我們只要實(shí)現(xiàn)接口就可以了,就可以做出很多絢麗的動(dòng)畫了禽炬。其中涧卵,自定義插值器需要實(shí)現(xiàn) Interpolator或者TimeInterpolator,自定義估值器 需要實(shí)現(xiàn)TypeEvaluator腹尖。

但是一般來(lái)說(shuō)柳恐,插值器使用系統(tǒng)的就足夠了,估值器自定義的可能會(huì)多一些热幔,另外就是如果要對(duì)其他類型(非Int丶float丶color)做動(dòng)畫胎撤,必須使用自定義估值器算法。
在這里我們實(shí)現(xiàn)拋物線軌跡是 固定時(shí)間的拋物線(球按照拋物線軌跡運(yùn)行1.5秒)断凶。其目的主要是為了熟練使用自定義估值器。

步驟一:因?yàn)槭且粋€(gè)控件的運(yùn)動(dòng)軌跡巫俺,肯定要涉及到點(diǎn)的坐標(biāo)(x,y),所以首先要建一個(gè)Point類

public class Point  {
    private float x;
    private float y;

    public Point(float x, float y) {
        this.x = x;
        this.y = y;
    }

    public float getX() {
        return x;
    }

    public void setX(float x) {
        this.x = x;
    }

    public float getY() {
        return y;
    }

    public void setY(float y) {
        this.y = y;
    }
}

步驟二:創(chuàng)建自定義估值器:因?yàn)镻oint不是系統(tǒng)估值器所支持的類型认烁,所以需要自定義

public class MyEvaluator implements TypeEvaluator<Point> {
    @Override
    public Point evaluate(float fraction, Point startValue, Point endValue) {
        //fraction 動(dòng)畫的完成度:受插值器影響
        Log.e("TAG","fraction"+"==="+fraction);
        float x = 400 * (fraction*1.5f);    //坐標(biāo)x = k * t
        float y = 400 * (fraction*1.5f) * (fraction*1.5f);  //坐標(biāo)x = k * t *t

         //根據(jù)新生成的坐標(biāo)創(chuàng)建Point類并返回
        Point point = new Point(x,y);
        return point;
    }
}

步驟三:為所需要的控件添加動(dòng)畫

 @Override
    public void onClick(View v) {
        //該寫法會(huì)報(bào)錯(cuò): java.lang.ClassCastException: java.lang.Float cannot be cast to com.bing.myparabola.Point
        //因?yàn)镺bjectAnimator會(huì)自動(dòng)賦值,而settranslationX()是Float類型的介汹,所以只能使用ValueAnimator
      /*ObjectAnimator animator = ObjectAnimator.ofObject(button,"translationX",new MyEvaluator(),new Point(0,0));
        animator.setDuration(1500);
        animator.start();*/

      ValueAnimator animator = ValueAnimator.ofObject(new MyEvaluator(),new Point(0,0),new Point(1,1));

        //設(shè)置動(dòng)畫運(yùn)行時(shí)間為1.5s
        animator.setDuration(1500);

        //動(dòng)畫屬性更新監(jiān)聽(tīng)器
        //即:值每更新一次却嗡,變化一次,該方法被調(diào)用一次嘹承,我們可以通過(guò)該方法窗价,手動(dòng)對(duì)控件的屬性賦值
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                Point point = (Point) animation.getAnimatedValue();

                button.setX(point.getX());

                button.setY(point.getY());


            }
        });

        //開(kāi)始動(dòng)畫
        animator.start();

    }

效果圖為:


GIF.gif

項(xiàng)目地址為:https://github.com/fengxiaobing/MyParabola

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市叹卷,隨后出現(xiàn)的幾起案子撼港,更是在濱河造成了極大的恐慌坪它,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帝牡,死亡現(xiàn)場(chǎng)離奇詭異往毡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)靶溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門开瞭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人罩息,你說(shuō)我怎么就攤上這事嗤详。” “怎么了瓷炮?”我有些...
    開(kāi)封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵葱色,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我崭别,道長(zhǎng)冬筒,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任茅主,我火速辦了婚禮舞痰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诀姚。我一直安慰自己响牛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布赫段。 她就那樣靜靜地躺著呀打,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糯笙。 梳的紋絲不亂的頭發(fā)上贬丛,一...
    開(kāi)封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音给涕,去河邊找鬼豺憔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛够庙,可吹牛的內(nèi)容都是我干的恭应。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼耘眨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼昼榛!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起剔难,我...
    開(kāi)封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胆屿,失蹤者是張志新(化名)和其女友劉穎奥喻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體莺掠,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衫嵌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彻秆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楔绞。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖唇兑,靈堂內(nèi)的尸體忽然破棺而出酒朵,到底是詐尸還是另有隱情,我是刑警寧澤扎附,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布蔫耽,位于F島的核電站,受9級(jí)特大地震影響留夜,放射性物質(zhì)發(fā)生泄漏匙铡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一碍粥、第九天 我趴在偏房一處隱蔽的房頂上張望鳖眼。 院中可真熱鬧,春花似錦嚼摩、人聲如沸钦讳。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)愿卒。三九已至,卻和暖如春潮秘,著一層夾襖步出監(jiān)牢的瞬間琼开,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工枕荞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稠通,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓买猖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親滋尉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玉控,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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