Tween(补间)动画
視圖動畫,也叫Tween(補間)動畫可以在一個視圖容器內執行一系列簡單變換(位置、大小、旋轉、透明度)。譬如,如果你有一個TextView對象,您可以移動、旋轉、縮放、透明度設置其文本,當然,如果它有一個背景圖像,背景圖像會隨著文本變化。
補間動畫通過XML或Android代碼定義,建議使用XML文件定義,因為它更具可讀性、可重用性。
如下是視圖動畫相關的類繼承關系:
屬性說明
可以看出來Animation抽象類是所有補間動畫類的基類,所以基類會提供一些通用的動畫屬性方法,詳細這些屬性
補間動畫的無論哪一種都已經具備了上面的屬性,也都可以設置使用這些屬性中的一個或多個等
Alpha屬性詳解
Rotate屬性詳解
Scale屬性詳解
Translate屬性詳解
AnimationSet
AnimationSet繼承自Animation,是上面四種的組合容器管理類,沒有特有的屬性,他的屬性繼承自Animation.
所以特別注意,當我們對set標簽使用Animation的屬性時會對該標簽下的所有子控件都產生影響。
xml示例代碼
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
>
<alpha
android:fromAlpha="float"
android:toAlpha="float" />
<scale
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"
android:pivotX="float"
android:pivotY="float" />
<translate
android:fromXDelta="float"
android:toXDelta="float"
android:fromYDelta="float"
android:toYDelta="float" />
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float" />
<set>
...
</set>
</set>
Animations類的使用方法
補間動畫注意事項
特別特別注意:補間動畫執行之后并未改變View的真實布局屬性值。切記這一點,譬如我們在Activity中有一個Button在屏幕上方,我們設置了平移動畫移動到屏幕下方然后保持動畫最后執行狀態呆在屏幕下方,這時如果點擊屏幕下方動畫執行之后的Button是沒有任何反應的,而點擊原來屏幕上方沒有Button的地方卻響應的是點擊Button的事件。
視圖動畫Interpolator插值器詳解
可以看見其實各種插值器都是實現了Interpolator接口,同時可以看見系統提供了許多已經實現好的插值器,具體如下:
插值器使用方法
<set android:interpolator="@android:anim/accelerate_interpolator">
...
</set>
插值器的自定義
關于插值器的自定義分為兩種實現方式,xml自定義實現(其實就是對現有的插值器的一些屬性修改)或java代碼實現方式。
XML自定義插值器的步驟:
* 在res/anim/目錄下創建filename.xml文件。
* 修改你準備自定義的插值器如下:
<?xml version="1.0" encoding="utf-8"?> <InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android" android:attribute_name="value" />* 在你的補間動畫文件中引用該文件即可
* 可以看見上面第二步修改的是現有插值器的一些屬性,但是有些插值器卻不具備修改屬性,具體如下:
<accelerateDecelerateInterpolator>無可自定義的attribute。
<accelerateInterpolator>android:factor 浮點值,加速速率(默認值為1)。
<anticipateInterploator>android:tension 浮點值,起始點后拉的張力數(默認值為2)。
<anticipateOvershootInterpolator>android:tension 浮點值,起始點后拉的張力數(默認值為2)。
android:extraTension
浮點值,拉力的倍數(默認值為1.5)。
<bounceInterpolator>無可自定義的attribute。
<cycleInterplolator>android:cycles 整形,循環的個數(默認為1)。
<decelerateInterpolator>android:factor 浮點值,減速的速率(默認為1)。
<linearInterpolator>無可自定義的attribute。
<overshootInterpolator>android:tension 浮點值,超出終點后的張力(默認為2)。
再來看看Java自定義插值器的(Java自定義插值器其實是xml自定義的升級,也就是說如果我們修改xml的屬性還不能滿足需求,那就可以選擇通過Java來實現)方式。
可以看見上面所有的Interpolator都實現了Interpolator接口,而Interpolator接口又繼承自TimeInterpolator,TimeInterpolator接口定義了一個float
getInterpolation(float
input);方法,這個方法是由系統調用的,其中的參數input代表動畫的時間,在0和1之間,也就是開始和結束之間。* 如下就是一個動畫始末速率較慢、中間加速的AccelerateDecelerateInterpolator插值器:
public class AccelerateDecelerateInterpolator extends BaseInterpolator implements NativeInterpolatorFactory { ...... public float getInterpolation(float input) { return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f; } ...... }
總結
以上是生活随笔為你收集整理的Tween(补间)动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: translate 和 translat
- 下一篇: iOS 简单的图片缩放