Android——View動畫
阿新 • • 發佈:2018-11-15
補間動畫
- 漸變
- 縮放
- 平移
- 旋轉
Java類 | XML標籤 | 效果 |
---|---|---|
AlphaAnimation | alpha | 讓透明度漸變 |
ScaleAnimation | scale | 放大或縮小 |
TranslateAnimation | translate | 移動位置 |
RotateAnimation | rotate | 繞某一點旋轉 |
兩種使用方式
- 第一種:
1、在res中新建anim資料夾,建立xml動畫檔案,如:res/anim/anim_test.xml
2、在java檔案中用這個xml檔案生成Animation類
3、呼叫View的startAnimation來啟動動畫
- 第二種:
直接在Java檔案中new一個 Animation 的子類,然後呼叫View的startAnimation啟動動畫
final RotateAnimation animation = new RotateAnimation(0, 180, 50, 50); animation.setDuration(2000); btnRun.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ivIc.startAnimation(animation); } });
一般推薦使用XML來寫補間動畫,有以下好處
- xml檔案以配置的形式,讓動畫看起來更直觀,可讀性強
- 一個動畫檔案可以被多個View使用,重用性強
- 便於更換動畫,更換一個View的動畫只要更換load的xml檔案就行
Animation的屬性
四個子類獨有的屬性不多,大部分是繼承父類Animation的,所以先看Animation的屬性
Animation的屬性 | 含義 |
---|---|
android:detachWallpaper | 針對Window的動畫屬性。當一個window在桌面上動畫時,是否讓桌面桌布跟著動畫,預設是false |
android:duration | 動畫執行的時間 |
android:fillAfter | 如果為true,那麼動畫執行完就會定格在執行完的那個畫面,不會恢復到原位 |
android:interpolator | 設定插值器,來控制動畫在不同時間段的速度。預設是加速減速插值器 |
android:repeatCount | 動畫重複的次數,所以總共會執行的動畫次數是這個重複次數+1 |
android:repeatMode | 動畫重複的方式,有兩個值,reverse和restart。reverse表示動畫會正反輪流執行,restart會正方向一直執行 |
android:startOffset | 動畫延遲執行的時間,單位是毫秒 |
android:zAdjustment | 可以取三個值,normal:0,top:1,bottom:-1.代表可以在動畫過程中調整z軸的順序。 |
AlphaAnimation的獨有屬性
AlphaAnimation的獨有屬性 | 含義 |
---|---|
android:fromAlpha | 動畫開始時的透明度,從0-1,0表示完全透明,1表示完全不透明 |
android:toAlpha | 動畫結束時的透明度 |
5秒從全透明變成完全不透明
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000">
<alpha
android:fromAlpha="0"
andorid:toAlpha />
</set>
ScaleAnimation的獨有屬性
ScaleAnimation的獨有屬性 | 含義 |
---|---|
android:pivotX | 縮放原點的x軸座標,縮放圍繞這個點執行,預設是View的左上角(0, 0) |
android:pivotY | 縮放原點的y軸座標,XML中的值有三種寫法,數值:50;百分數:50%;百分數p:50%p。如果是數值,表示以View的左上角為(0, 0),然後加上數值,以這個點為縮放中心。如果是百分數,表示加上自身高度的50%,作為所放電。如果是百分數p,如50%p,表示加上父控制元件高度的50%,作為所放電 |
android:fromXScale | 動畫開始時,X軸上縮放的比例。1表示本身大小 |
android:fromYScale | 動畫開始時,Y軸上縮放的比例。1表示本身大小 |
android:toXScale | 動畫結束時,X軸上縮放的比例。1表示本身大小 |
android:toYScale | 動畫結束時,Y軸上縮放的比例。1表示本身大小 |
從圖片的右下角縮放,寬高各從原來的2倍縮放到原來的十分之一
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000">
<scale
android:pivotX="100%"
andorid:pivotY="100%"
andorid:fromXScale="2"
android:fromYScale="2"
android:toXScale="0.1"
android:toYScale="0.1" />
</set>
TranslateAnimation的獨有屬性
TranslateAnimation的獨有屬性 | 含義 |
---|---|
android:fromXDelta | 動畫開始時,View左上角的X座標,也有三種寫法,同pivotX |
android:fromYDelta | 動畫開始時,View左上角的Y座標,也有三種寫法,同pivotX |
android:toXDelta | 動畫結束時,View左上角的X座標,也有三種寫法,同pivotX |
android:toYDelta | 動畫結束時,View左上角的Y座標,也有三種寫法,同pivotX |
從自身的左上角移到自身的右下角
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000">
<translate
andorid:fromXDelta="-100%"
android:fromYDelta="-100%"
android:toXDelta="100%"
android:toYDelta="100%" />
</set>
RotateAnimation的獨有屬性
RotateAnimation的獨有屬性 | 含義 |
---|---|
android:pivotX | 旋轉動畫的中心的X座標,旋轉圍繞這個點進行,也有三種寫法 |
android:pivotY | 旋轉動畫的中心的Y座標,旋轉圍繞這個點進行,也有三種寫法 |
android:fromDegrees | 動畫開始時的旋轉角度,順序針轉增加,逆時針轉減少,360度為一圈 |
android:toDegrees | 動畫結束時的旋轉角度 |
從360度轉到-90度
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000">
<rotate
andorid:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="360"
android:toDegrees="-90" />
</set>
組合動畫
旋轉的同時,改變透明度
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000">
<rotate
andorid:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="360"
android:toDegrees="-90" />
<alpha
android:fromAlpha="1"
android:toAlpha="0.2" />
</set>
插值器
AnimationSet(動畫集合類)可以設定集合中的動畫是否共享同一個插值器
//true or false
android:shareInterpolator
Interpolator
Interpolator繼承自 TimeInterpolator ,用來定義動畫在不同的時間有不同的速度,也叫插補器。
插值器可以在xml檔案中用 android:interpolator 設定,也可以在java中通過 animation.setInterpolator 來設定
在java中設定可以傳一些引數,對插值器進行更詳細的設定,比較靈活。
插值器 | XML中的值 | 作用 |
---|---|---|
AccelerateDecelerateInterpolator | @android:anim/accelerate_decelerate_interpolator | 加速減速插值器,動畫先加速,再減速 |
AccelerateInterpolator | @android:anim/accelerate_interpolator | 加速插值器 |
DecelerateInterpolator | @android:anim/decelerate_interpolator | 減速插值器 |
BounceInterpolator | @android:anim/bounce_interpolator | 回彈插值器,動畫結束會回彈幾下 |
CycleInterpolator | @android:anim/cycle_interpolator | 圓插值器,動畫會重複幾次,速度沿著正弦曲線變化 |
LinearInterpolator | @android:anim/linear_interpolator | 線性插值器,保持勻速 |
AnticipateOvershootInterpolator | @android:anim/anticipate_overshoot_interpolator | 預期超調插值器,動畫開始時往前甩一下,動畫結束時往後甩一下 |
AnticipateInterpolator | @android:anim/anticipate_interpolator | 預期插值器,動畫開始時會往前甩一下 |
OvershootInterpolator | @android:anim/overshoot_interpolator | 超調插值器,動畫結束時往後甩一下 |
對View動畫的監聽
AnimationListener提供對動畫開始,重複和結束的監聽
animation.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation animation) {
Log.i(TAG, "動畫開始時的操作");
}
@Override
public void onAnimationRepeat(Animation animation) {
Log.i(TAG, "動畫重複時的操作");
}
@Override
public void onAnimationEnd(Animation animation) {
Log.i(TAG, "動畫結束時的操作");
}
});