Android動畫之translate 位移動畫

2021-07-02 16:30:35 字數 3631 閱讀 3945

translate動畫是非常好理解,就是定義乙個開始的位置和乙個結束位置,定義移動時間,然後就能自動產生移動動畫。android的translate移動方向有 橫向(x) 豎向(y), 左右滑動使用了橫向移動效果,對於豎向(y)的位置如下:

定義乙個向上退出的動畫(從位置2 移動位置3)和從下面進入(從位置1移動位置2)的動畫定義檔案如下:

out_to_up.xml (從螢幕上面退出)

<?xml  version="1.0" encoding="utf-8"?>

""android:interpolator="@android:anim/accelerate_interpolator"

android:fromydelta="0%p"

android:toydelta="-100%p"

android:duration="1000">

in_from_down.xml (從螢幕下面進入)

<?xml  version="1.0" encoding="utf-8"?>

""android:interpolator="@android:anim/accelerate_interpolator"

android:fromydelta="100%p"

android:toydelta="0%p"

android:duration="1000">

接下來講一講translate的幾個重要的屬性:

android:interpolator: 加速器,非常有用的屬性,可以簡單理解為動畫的速度,可以是越來越快,也可以是越來越慢,或者是先快後忙,或者是均勻的速度等等,對於值如下:

@android:anim/accelerate_interpolator: 越來越快

@android:anim/decelerate_interpolator:越來越慢

@android:anim/accelerate_decelerate_interpolator:先快後慢

@android:anim/anticipate_interpolator: 先後退一小步然後向前加速

@android:anim/overshoot_interpolator:快速到達終點超出一小步然後回到終點

@android:anim/anticipate_overshoot_interpolator:到達終點超出一小步然後回到終點

@android:anim/bounce_interpolator:到達終點產生彈球效果,彈幾下回到終點

@android:anim/linear_interpolator:均勻速度。

android:duration: 動畫執行時間,定義在多次時間(ms)內完成動畫

android:startoffset: 延遲一定時間後執行動畫

fromxdelta: x軸方向開始位置,可以是%,也可以是具體的畫素 具體見圖

toxdelta:   x軸方向結束位置,可以是%,也可以是具體的畫素

fromydelta: y軸方向開始位置,可以是%,也可以是具體的畫素

toydelta:    y軸方向結束位置,可以是%,也可以是具體的畫素

當你了解上面的屬性後,你可以組合出很多有趣的位置移動效果。比如使用加速器:@android:anim/bounce_interpolator 可以產生彈球落地時的效果。

在實際專案中需要在進行只使用「左右上下滑動」的效果可能還不夠炫,希望在切換時能產生更動態的效果,比如開始切換時第1個activity先向後退一步,然後在向左方向退出螢幕。然後第2個activity緊跟後面從右邊進入螢幕,到達終點時有乙個動態效果。在了解了動畫加速器後,大家都知道可以採用:anticipate_overshoot_interpolator、anticipate_interpolator、overshoot_interpolator這三個加速器實現左右滑動切換時啟動或者結束的動態效果。

動畫檔案定義如下:

dync_out_to_left.xml 

<?xml  version="1.0" encoding="utf-8"?>

""android:duration="500"

android:fromxdelta="0%p"

android:interpolator="@android:anim/anticipate_interpolator"

android:toxdelta="-100%p" />

dync_in_from_right.xml

<?xml  version="1.0" encoding="utf-8"?>

""android:duration="500"

android:fromxdelta="100%p"

android:interpolator=" @android:anim/anticipate_overshoot_interpolator "

android:toxdelta="0%p" />

但是再使用以上動畫配置,會出現以下問題:

1.     第1個activity使用anticipate_interpolator時,開始移動時先向後退一步,然後向前移動。但向後退一步步伐太大,略顯誇張,實際應用中只希望退後一小小步就行了。

2.     由於開始向後退一步,額外增加了移動時間,導致前一activity和後乙個activity的時間不同步。

為了解決以上問題,重新定義動態效果,將第1個activity的移動分為2個動畫效果:(1)用200毫秒時間先向後移動2%p的位置 (2) 延遲200毫秒後從2%p位置向前移動到-100%p位置。 然後第2個activity從延遲200毫秒然後從102%p位置移動到0%p位置。

動畫定義如下:

new_dync_out_to_left.xml

<?xml  version="1.0" encoding="utf-8"?>

""android:shareinterpolator="false" >

android:duration="200"

android:fromxdelta="0%p"

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

android:toxdelta="2%p" />

android:duration="1000"

android:fromxdelta="2%p"

android:interpolator="@android:anim/accelerate_interpolator"

android:startoffset="200"

android:toxdelta="-100%p" />

new_dync_in_from_right.xml

<?xml  version="1.0" encoding="utf-8"?>

""android:duration="1000"

android:fromxdelta="102%p"

android:interpolator="@android:anim/anticipate_overshoot_interpolator"

android:startoffset="200"

android:toxdelta="0%p" />

Android動畫之屬性動畫

補間動畫,只是乙個動畫效果,元件其實還在原來的位置上,xy沒有改變,屬性動畫則反之 import android.animation.animator import android.animation.animatorinflater import android.animation.animato...

Android 動畫之activity動畫

前面和大家簡單分析了android的控制項的動畫效果 補間動畫和屬性動畫 但是在開發過程中我們發現 控制項的動畫效果做的很好,但是在頁面跳轉的時候很不自然,我們尋求一種讓使用者有一種漸進的效果,我看開始使用頁面之間的動畫效果,也就是activity之間的動畫效果,給使用者一種很自然的感覺。在andr...

android動畫之補間動畫

補間動畫 移動補間動畫,縮放補間動畫,旋轉補間動畫,透明補間動畫 1.移動補間動畫 translateanimation 指定移動的絕對位置 以自己的左上角為參照點 translateanimation translateanimation new translateanimation 0,0,0,...