1. 程式人生 > >【Android界面實現】View Animation 使用介紹

【Android界面實現】View Animation 使用介紹

ref 轉載 HA ceshi 很多 ons 伸縮 ets 時間設置

? ? 轉載請註明出處:http://blog.csdn.net/zhaokaiqiang1992

? ? 我們能夠使用view animation 動畫系統來給View控件加入tween動畫(下稱“補間動畫”),補間動畫通過計算一些動畫參數,比方說開始點,結束點,大小,旋轉角度和一些其它的動畫參數。來實現動畫效果。

? ? 補間動畫能夠給View對象加入一系列簡單的變換。比方位置,大小,角度或者是透明度。所以,假設你有一個TextView對象。你能夠移動,旋轉或者是變大。

假設它有一個背景圖片,背景圖片也會隨著text進行變化。

? ??http://developer.android.com/reference/android/view/animation/package-summary.html 這個地址提供了補間動畫須要的全部類。

? ? 一系列的動畫指令被定義為補間動畫,我們能夠使用xml文件或者是純代碼進行定義。當我們想定義一個布局的時候。xml文件更加的方便,由於相對於硬編碼。它可讀性好、復用性強而且易於替換。所以,在以下的實例中,我們將使用xml的方式(想要了解很多其它的關於硬編碼而不是xml方式的信息,請查閱AnimationSet類和Animation的子類)。

? ? 我們能夠通過設置屬性來決定我們想要動畫什麽時候發生,持續的時長等等。

動畫的變換能夠是順序發生的,也能夠是同一時候發生的。比方。我們能夠把一個TextView從左移動到右,然後旋轉180度。或者是,我們能夠讓移動的動畫和旋轉動畫同一時候發生。

每一種動畫變換都須要設置自己特有的屬性集合(大小變化須要設置開始大小和結束大小,旋轉變化須要設置開始角度和結束角度,其它的也相似),還須要設置一些共同的屬性,比方開始時間和持續時間。

假設我們想讓非常多變換一起發生,給他們設置同樣的開始時間就可以。假設想讓變換順序發生,我們僅僅須要把開始時間設置成前面動畫的持續總時間就能夠了。

? ?假設我們想通過xml文件創建動畫,我們須要在project的res文件夾下,創建一個anim文件夾。文件必須有且僅僅有一個根元素。比方<alpha>,

<scale>,<translate>,<rotate>,插值器元素。或者是一個<set>元素裏面包括這些動畫元素(也能夠再包括一個set元素)。假設我們想讓動畫順序發生,我們比方設置單獨的startOffset屬性。就像以下的樣例。

? ? 以下的這個xml文件來自ApiDemo,用來伸縮然後同一時候旋轉一個View對象。

<set android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
           android:fromXScale="1.4"
           android:toXScale="0.0"
           android:fromYScale="0.6"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"
           android:fillBefore="false" />
        <rotate
           android:fromDegrees="0"
           android:toDegrees="-45"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400" />
    </set>
</set>

? ? 屏幕的坐標系的(0。0)點在屏幕的左上角上面。向右為x正坐標,向下是y的正坐標。

? ? 一些值,比方說pivotX,能夠指定與自身或者是父類相關。請確保你使用的格式是你想要的效果的正確格式,比方,50%是相對於自身的50%,可是50就不一樣了。

? ? 我們也能夠指定一個interpolator(插值器)來確定變換的時間怎樣變化。Android裏面包括了幾中插值器子類。每一種都有自己的加速度曲線。比方accelerateInterpolator,會告訴變換在開始的時候速度比較慢。然後開始加速。我們能夠在xml裏面設置相關的屬性。

? ? 假設我們把上面的代碼叫做hyperspace_jump.xml,那麽我們使用以下的代碼。給一個ImageView控件加入動畫。

? ??

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
? ? 作為startAnimatinon()的一個可選的方式。我們能夠使用Animation,setStartTime()設置開始時間。然後使用View,setAnimation()設置動畫

? ? 假設想了解很多其它XML使用方法和可選的tag的屬性,請查看Animation Resources。

? ? Note:

? ? 無論你的動畫是移動還是放縮,設置了動畫的View控件的邊界都不會自己主動調整去適應,即使如此,動畫依舊會被繪制出來,及時超出了邊界也不會被分割。然而,假設動畫超出了父View的範圍,那超出部分就會被分割。


? ? 原文地址:http://developer.android.com/guide/topics/graphics/view-animation.html

【Android界面實現】View Animation 使用介紹