標籤:android style blog http color io 使用 java ar
Android 簡單的動畫效果有Animtion 類提供 1.在XML中實現動畫效果;2.在java代碼中實現動畫效果。
動畫相關的屬性
表一:SET屬性
| 名稱 |
屬性 |
備忘 |
| android:shareInterpolator |
是否共用插入器 |
共用時,四個子節點都用一個插入器 |
| android:interpolator |
指定一個動畫的插入器 |
使用系統資源 |
| android:fillEnabled |
|
當設定為true時,fillAfter和fillBefroe將會都為true,此時會忽略fillBefore 和fillAfter兩種屬性 |
| android:fillAfter |
該動畫轉化是否在動畫結束後被應用 |
boolean |
| android:fillBefore |
該動畫轉化是否在動畫開始前被應用 |
boolean |
| android:repeatMode |
重複模式 |
"restart" =從頭開始 或者 "reverse"=從末尾開始 |
| android:repeatCount |
重複次數 |
integer -1為無限迴圈 |
| android:duration |
動畫期間 |
integer |
| android:startOffset |
動畫時間間隔(動畫執行前停留時間) |
long |
| android:zAdjustment |
定義動畫z order的變換 |
[normal] or [top] or [bottom] |
| android:detachWallpaper |
未知 |
boolean |
| |
|
|
| |
|
|
這裡詳細解釋下android:interpolator 動畫插入器屬性(動畫速度效果的體現)。
[email protected]:anim/accelerate_decelerate_interpolator:先加速後減速
[email protected]:anim/accelerate_interpolator :加速
[email protected]:anim/decelerate_interpolator:減速
[email protected]:anim/anticipate_interpolator:先往動畫移動的反方向移動一點然後在沿著設定的動畫移動 移動軌跡如。
5.anticipate_overshoot_interpolator:先往動畫的反方向移動一點,然後沿著設定的方向移動到終點之後繼續移動一點然後在回彈到最終設定的位置。如:
[email protected]:anim/bounce_interpolator:動畫移動到最後會有幾次回彈的效果,最終停止在設定的位置。
[email protected]:anim/cycle_interpolator:動畫周期移動。
[email protected]:anim/linear_interpolator:動畫勻速移動。
[email protected]:anim/overshoot_interpolator:動畫到最後的位置會向反方向移動一點。
| Interpolator對象 |
資源ID |
功能作用 |
| AccelerateDecelerateInterpolator |
@android:anim/accelerate_decelerate_interpolator |
先加速再減速 |
| AccelerateInterpolator |
@android:anim/accelerate_interpolator |
加速 |
| AnticipateInterpolator |
@android:anim/anticipate_interpolator |
先回退一小步然後加速前進 |
| AnticipateOvershootInterpolator |
@android:anim/anticipate_overshoot_interpolator |
在上一個基礎上超出終點一小步再回到終點 |
| BounceInterpolator |
@android:anim/bounce_interpolator |
最後階段彈球效果 |
| CycleInterpolator |
@android:anim/cycle_interpolator |
周期運動 |
| DecelerateInterpolator |
@android:anim/decelerate_interpolator |
減速 |
| LinearInterpolator |
@android:anim/linear_interpolator |
勻速 |
| OvershootInterpolator |
@android:anim/overshoot_interpolator |
快速到達終點並超出一小步最後回到終點 |
關於修改動畫插入器的屬性 給個連結:點擊開啟連結
表二:alpha
| 名稱 |
屬性 |
備忘 |
| android:toAlpha |
動畫結束時的透明度 |
float [0,1] 0表示完全透明 1表示完全不透明 |
| android:duration |
動畫期間 |
integer |
| android:fromAlpha |
動畫開始時的透明度 |
float [0,1] 0表示完全透明 1表示完全不透明 |
| |
|
|
表三:SCALE
| 名稱 |
屬性 |
備忘 |
| android:fromXScale |
動畫開始時,X座標上的伸縮尺寸 |
float,0.0表示收縮到沒有、1.0表示正常無伸縮,小於1表示收縮,大於1表示放大 |
| android:toXScale |
動畫結束時,X座標上的伸縮尺寸 |
同上 |
| android:fromYScale |
動畫開始時,Y座標上的伸縮尺寸 |
同上 |
| android:toYScale |
動畫結束時,Y座標上的伸縮尺寸 |
同上 |
| android:pivotX |
動畫相對於物件的X的開始位置 |
[0%,100%],50%表示中間 |
| android:pivotY |
動畫相對於物件的Y的開始位置 |
0%,100%],50%表示中間 |
| android:duration |
同set |
同set |
| |
|
|
表四:TRANSLATE
| 名稱 |
屬性 |
備忘 |
| android:fromXDelta |
動畫開始時,X座標上的位置 |
integer 預設以自己為參照物 |
| android:toXDelta |
動畫結束時,X座標上的位置 |
integer 預設以自己為參照物 |
| android:fromYDelta |
動畫開始時,Y座標上的位置 |
integer 預設以自己為參照物 |
| android:toYDelta |
動畫結束時,Y座標上的位置 |
integer 預設以自己為參照物 |
| |
|
|
表五:ROTATE
| 名稱 |
屬性 |
備忘 |
| android:fromDegrees |
動畫開始時,物件的角度 |
負數:逆時針旋轉,正數:順時針旋轉 |
| android:toDegrees |
動畫結束時,物件的角度(可大於360度) |
同上 |
| android:pivotX |
動畫相對於物件的X的開始位置 |
[0%,100%],50%表示中間 |
| android:pivotY |
動畫相對於物件的Y的開始位置 |
[0%,100%],50%表示中間 |
| |
|
一..XML 實現 alpha :
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:duration="2000" android:fromAlpha="0" android:repeatCount="3"//動畫重複的次數 android:repeatMode="reverse"//動畫重複的模式 reverse:倒序,即從最後一幀播放動畫; restart:順序,即從頭開始播放動畫 android:toAlpha="1.0" /></set>
幾個值得注意的地方:如果你需要讓動畫設定 android:fillAfter="true"
android:fillBefore="false" 的相關屬性的時候 必須將屬性這是在<set>下面才有效。比如有效 設定是這樣的
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" > <alpha android:duration="2000" android:fromAlpha="0" android:repeatCount="3" android:repeatMode="reverse" android:toAlpha="1.0" /></set>
那麼上面的動畫就停留在最後一幀畫面上。
二.代碼實現alpha
Animation anim = new AlphaAnimation(0f, 1.0f);anim.setDuration(2000);anim.setRepeatCount(Animation.INFINITE);anim.setRepeatMode(Animation.RESTART);
三.XML實現scale
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:interpolator="@android:anim/decelerate_interpolator" > <!-- 畫面停留在最後一幀 --> > <scale android:duration="2000" android:fromXScale="0.5" android:fromYScale="0.5" android:pivotX="50.0%" > <!-- 動畫相對於空間X座標開始的位置50。0%表示從空間的正中央開始縮放動畫 --> android:pivotY="50.0%" android:repeatCount="3" android:repeatMode="reverse" android:toXScale="1.0" android:toYScale="1.0" /> </scale></set>
四.代碼實現scale
Animation anim1 = new ScaleAnimation(0.5f, 1.0f, 0.5f, 1.0f, 0.5f, 0.5f);anim1.setDuration(2000);anim1.setRepeatCount(3);anim1.setRepeatMode(Animation.REVERSE);anim1.setInterpolator(this, interpolator.accelerate_decelerate);anim1.setFillAfter(true);
五.XML實現stranslate
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator" android:fillAfter="true" > <translate android:duration="2000" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="1080" /></set>
六代碼實現Stranslate
Animation animTranlate = new TranslateAnimation(0, 0, 0, 400);animTranlate.setDuration(2000);animTranlate.setFillAfter(true);animTranlate.setInterpolator(this, interpolator.bounce);text.startAnimation(animTranlate);
七.XML實現rotate
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:interpolator="@android:anim/accelerate_decelerate_interpolator" > <rotate android:duration="2000" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="180" //負數就是逆時針,正數順時針。
/></set>
八.代碼實現rotate
Animation animRotate = new RotateAnimation(0f, 360f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);animRotate.setDuration(2000);animRotate.setInterpolator(this, interpolator.bounce);animRotate.setFillAfter(true);<span style="white-space:pre">animRotate.setStartOffset(2000);</span>//動畫執行前停留時間text.startAnimation(animRotate);
九.組合動畫的實現
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fillAfter="true" android:interpolator="@android:anim/accelerate_decelerate_interpolator" > <alpha android:fromAlpha="0" android:toAlpha="1.0" /> <scale android:fromXScale="0" android:fromYScale="0" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" /></set>
十.代碼實現組合動畫
Animation anim1 = new ScaleAnimation(0.5f, 1.0f, 0.5f, 1.0f, 0.5f, 0.5f);anim1.setDuration(2000);anim1.setRepeatCount(3);anim1.setRepeatMode(Animation.REVERSE);anim1.setInterpolator(this, interpolator.accelerate_decelerate);anim1.setFillAfter(true);// text.setAnimation(anim1);Animation animTranlate = new TranslateAnimation(0, 0, 0, 400);animTranlate.setDuration(2000);animTranlate.setFillAfter(true);animTranlate.setInterpolator(this, interpolator.bounce);// text.startAnimation(animTranlate);Animation animRotate = new RotateAnimation(0f, 360f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);animRotate.setDuration(2000);animRotate.setInterpolator(this, interpolator.bounce);animRotate.setFillAfter(true);// text.startAnimation(animRotate);AnimationSet animationSet = new AnimationSet(true);animationSet.addAnimation(animRotate);animationSet.addAnimation(animTranlate);animationSet.addAnimation(anim1);text.startAnimation(animationSet);
完結!
android 簡單動畫之 animtion