2017年7月25日 星期二

Android:動畫

Android目前支援3種類型的動畫:
1.影格動畫(Frame Animation)
2.補間動畫(View Animation)
3.屬性動畫(Property Animation)


(1)Frame Animation(影格動畫)類似gif動畫一樣是一連串的drawable序列組成,優點是使用簡單方便、缺點是需要事先準備好每一幀圖片。

(2)View Animation(視圖動畫)視圖動畫比較簡單,只能應用於各種View,可以做一些位置、大小、旋轉和透明度的簡單轉變。僅需定義開始與結束的關鍵幀,而變化的中間幀由系統補上,可以達到大部分的動畫需求。

(3)Property Animation(屬性動畫)是3.0後推出的動畫,優點是使用簡單、降低實現的複雜度、直接更改對象的屬性、幾乎可適用於任何對象而僅非View類,缺點是需要3.0以上的API支持


本篇介紹View Animation

可以通過xml檔定義,xml檔放於res/anim/目錄下,根項目可以為:<alpha>, <scale>, <translate>, <rotate>, 或者<set>。其中,<set>標籤定義的是動畫集,它可以包含多個其他標籤

<alpha>
可以定義動畫的透明度,也就是可以實現淡入淡出的效果
  • android:duration 動畫從開始到結束持續的時長,單位為毫秒 
  • android:fromAlpha 動畫開始時的透明度,0.0為全透明,1.0為不透明,默認為1.0 
  • android:toAlpha 動畫結束時的透明度,0.0為全透明,1.0為不透明,默認為1.0
動畫的xml檔:

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromAlpha="0.0"
    android:toAlpha="1.0" />
將動畫添加到view上:

view.startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in));

<scale>
可以定義縮放的視圖動畫

  • android:fromXScale 表示沿X軸縮放的起始比例
  • android:toXScale 表示沿X軸縮放的結束比例
  • android:fromYScale 表示沿Y軸縮放的起始比例
  • android:toYScale 表示沿Y軸縮放的結束比例

          以上四個屬性,0.0表示縮放到沒有,1.0表示正常無縮放,小於1.0表示收縮,大於1.0表示放大

  • android:pivotX 縮放時的固定不變的X座標,一般用百分比表示,0%表示左邊緣,100%表示右邊緣
  • android:pivotY 縮放時的固定不變的Y座標,一般用百分比表示,0%表示頂部邊緣,100%表示底部邊緣

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:pivotX="0%"
    android:pivotY="100%"
    android:toXScale="1.5"
    android:toYScale="1.5" />

<translate>
可以定義位移的動畫效果

  • android:interpolator 表示動畫加速器,可設定屬性有accelerate_interpolator(加速)、decelerate_interpolator(減速)和accelerate_decelerate_interpolator(加速減速)
  • android:fromXDelta 動畫起始位置的水平坐標
  • android:toXDelta 動畫結束位置的水平坐標
  • android:fromYDelta 動畫起始位置的垂直坐標
  • android:toYDelta 動畫結束位置的垂直坐標
  • android:duration 動畫的持續時間,單位是毫秒

座標的值可以有三種格式:從-100到100;以"%"結束,表示相對於View本身的百分比位置;如果以"%p"結束,表示相對于View的父View的百分比位置;如果沒有任何尾碼,表示相對於View本身具體的圖元值。

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromXDelta="-100%"
    android:fromYDelta="0"
    android:toXDelta="100%p"
    android:toYDelta="0" />

<rotate>
可以定義旋轉的動畫

  • android:fromDegrees 表示旋轉的起始角度
  • android:toDegrees 表示旋轉的結束角度
  • android:repeatCount 設定旋轉的次數,0表示不重複,1表示會多旋轉一次,infinite或-1表示一直旋轉
  • android:repeatMode 設定重複的模式,有restart與reverse,預設是restart,該屬性只有當repeatCount設定大於0或infinite時才有作用

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%" />

<set>
可以將多個動畫組合成一個動畫集

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate 
        android:fromYDelta="100%p" 
        android:toYDelta="0"
        android:duration="2000"/>
    <alpha 
        android:fromAlpha="0.0" 
        android:toAlpha="1.0"
        android:duration="2000" />
</set>

沒有留言:

張貼留言