android使用動畫移動View

經(jīng)常會遇到屏幕上的View位置更新的情況电谣,這時(shí)如果中間添加一些動畫,會顯得很自然并且很酷炫抹蚀,而不是硬巴巴的剿牺。

Android中,修改View的位置方式很多环壤,修改x晒来、y、params以及動畫之類的郑现。本文將介紹使用ObjectAnimator進(jìn)行View的移動湃崩。

使用ObjectAnimator改變View位置

ObjectAnimator類提供了很簡單的方式操作View的屬性,提供了靜態(tài)方法根據(jù)你想要操作的屬性生成ObjectAnimator實(shí)例接箫。因?yàn)橄胍苿覸iew的位置攒读,這里考慮View的屬性是translationX和translationY。

下面的例子將TextView在2s里從左向右移動了400像素辛友,代碼如下:

moveBtn.setOnClickListener {
            ObjectAnimator.ofFloat(tvShow, "translationX", 400f)
                    .apply {
                        duration = 2000
                        start()
                    }
        }

效果如下:

移動View效果

關(guān)于ObjectAnimator的介紹薄扁,后續(xù)將有文章詳細(xì)介紹剪返,敬請期待。在這之前邓梅,可以看官方文檔

添加彎曲動作

ObjectAnimator的使用很簡單脱盲,但是只提供了直線移動。使用彎曲動畫可以讓效果更生動日缨,更符合Google的Material Design钱反。

使用PathInterpolator

PathInterpolator是Android 5.0新加入的類,基于貝塞爾曲線或Path對象匣距。這個(gè)類指定彎曲動畫在一個(gè)1*1的正方形中面哥,并且錨點(diǎn)在(0,0)和(1墨礁,1),其他控制點(diǎn)則通過構(gòu)造方法傳入幢竹。 創(chuàng)建PathInterpolator的一種方式是創(chuàng)建Path對象,然后將它應(yīng)用于PathInterpolator上恩静。

比如:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    val path = Path().apply {
        arcTo(0f, 0f, 1000f, 1000f, 270f, -180f, true) 
    } 
    val pathInterpolator = PathInterpolator(path)
} 

當(dāng)然焕毫,也可以通過在xml中定義PathInterpolator,比如:

<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:controlX1="0.4"
    android:controlY1="0"
    android:controlX2="1"
    android:controlY2="1"/>

應(yīng)用給View驶乾,必須這么使用:

val path = Path().apply {
                lineTo(400f, 0f)
                moveTo(400f, 0f)
                arcTo(0f, 0f, 1000f, 1000f, 270f, -180f, true)
                lineTo(400f, 400f)
            }
            ObjectAnimator.ofFloat(tvShow, View.X, View.Y, path).apply {
                duration = 2000
                start()
            }

效果如下:

完全動畫

可以看到邑飒,將根據(jù)Path定義的順序執(zhí)行。

關(guān)于官方代碼中下段代碼:

val animation = ObjectAnimator.ofFloat(view, "translationX", 100f).apply {
    interpolator = pathInterpolator 
    start() 
} 

執(zhí)行后级乐,App將會崩潰疙咸,崩潰原因是Path must be start at(0,0)and end at(1风科,1)撒轮。

但是這樣的代碼是可行的。

val path = Path().apply {
                cubicTo(0.2f,0f,0.1f,1f,0.5f,1f)
                lineTo(1f,1f)
            }
            ObjectAnimator.ofFloat(tvShow, "translationX", 400f).apply {
                duration = 2000
                interpolator = PathInterpolator(path)
                start()
            }

或者這樣的Path贼穆,

val path = Path().apply {
                lineTo(0.2f,0.2f)
                moveTo(0.2f,0.2f)
                lineTo(1f,1f)
            }

當(dāng)動畫中使用了最后值時(shí)题山,這時(shí)Path必須得以(0,0)開始故痊,(1顶瞳,1)結(jié)束;而不規(guī)定結(jié)束值愕秫,那么就按照Path運(yùn)作的最后值停留慨菱。

系統(tǒng)默認(rèn)提供了三種PathInterpolator,分別是:

  1. @interpolator/fast_out_linear_in.xml
  2. @interpolator/fast_out_slow_in.xml
  3. @interpolator/linear_out_slow_in.xml

參考:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戴甩,一起剝皮案震驚了整個(gè)濱河市符喝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甜孤,老刑警劉巖洲劣,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件备蚓,死亡現(xiàn)場離奇詭異,居然都是意外死亡囱稽,警方通過查閱死者的電腦和手機(jī)郊尝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來战惊,“玉大人流昏,你說我怎么就攤上這事⊥袒瘢” “怎么了况凉?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長各拷。 經(jīng)常有香客問我刁绒,道長,這世上最難降的妖魔是什么烤黍? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任知市,我火速辦了婚禮,結(jié)果婚禮上速蕊,老公的妹妹穿的比我還像新娘嫂丙。我一直安慰自己,他們只是感情好规哲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布跟啤。 她就那樣靜靜地躺著,像睡著了一般唉锌。 火紅的嫁衣襯著肌膚如雪隅肥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天袄简,我揣著相機(jī)與錄音武福,去河邊找鬼。 笑死痘番,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的平痰。 我是一名探鬼主播汞舱,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宗雇!你這毒婦竟也來了昂芜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赔蒲,失蹤者是張志新(化名)和其女友劉穎泌神,沒想到半個(gè)月后良漱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欢际,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年母市,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片损趋。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡患久,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浑槽,到底是詐尸還是另有隱情蒋失,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布桐玻,位于F島的核電站篙挽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏镊靴。R本人自食惡果不足惜铣卡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邑闲。 院中可真熱鬧算行,春花似錦、人聲如沸苫耸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褪子。三九已至量淌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嫌褪,已是汗流浹背呀枢。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笼痛,地道東北人裙秋。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像缨伊,于是被迫代替她去往敵國和親摘刑。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • 【Android 動畫】 動畫分類補(bǔ)間動畫(Tween動畫)幀動畫(Frame 動畫)屬性動畫(Property ...
    Rtia閱讀 6,158評論 1 38
  • 1 背景 不能只分析源碼呀刻坊,分析的同時(shí)也要整理歸納基礎(chǔ)知識枷恕,剛好有人微博私信讓全面說說Android的動畫,所以今...
    未聞椛洺閱讀 2,709評論 0 10
  • 動畫基礎(chǔ)概念 動畫分類 Android 中動畫分為兩種谭胚,一種是 Tween 動畫徐块、還有一種是 Frame 動畫未玻。 ...
    Rtia閱讀 1,229評論 0 6
  • 轉(zhuǎn)載一篇高質(zhì)量博文,原地址請戳這里轉(zhuǎn)載下來方便今后查看胡控。1 背景不能只分析源碼呀扳剿,分析的同時(shí)也要整理歸納基礎(chǔ)知識,...
    Elder閱讀 1,942評論 0 24
  • 一: 傳統(tǒng) View 動畫(Tween/Frame) 1.1 Tween 動畫 主要有 4 中:縮放铜犬、平移舞终、漸變、...
    dfg_fly閱讀 719評論 1 2