動畫(專題)
實現android UI界面動畫效果的API,Animations提供了一系列的動畫效果,可以進行旋轉、縮放、淡入淡出等。
Tweened Animations
該類Animations提供了旋轉、移動、伸展和淡出等效果。Alpha——淡入淡出,Scale——縮放效果,Rotate——旋轉,Translate——移動效果。
- AlphaAnimation
- TranslateAnimation
- ScaleAnimation
- RotateAnimation
- AnimationSet
代碼
TranslateAnimation translateAnimation =
new TranslateAnimation(
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,0.5f);
translateAnimation.setDuration(1000);
image.startAnimation(animationSet);```
#### 使用xml配置
translate.xml
Animation animation = AnimationUtils.loadAnimation(
Animation1Activity.this, R.anim.translate);
image.startAnimation(animation);```
## AnimationSet
一個AnimationSet包含了一系列的Animation</br></br>
#### xml配置
代碼方式
AnimationSet animationSet = new AnimationSet(true);
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
rotateAnimation.setDuration(1000);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(alphaAnimation);
image.startAnimation(animationSet);```
## Interpolator
Interpolator定義了動畫變化的速率,在Animations框架當中定義了一下幾種Interpolator
- AccelerateDecelerateInterpolator:在動畫開始與結束的地方速率改變比較慢,在中間的時候速率快;
- AccelerateInterpolator:在動畫開始的地方速率改變比較慢,然後開始加速;
- CycleInterpolator:動畫循環播放特定的次數,速率改變沿着正弦曲線;
- DecelerateInterpolator:在動畫開始的地方速率改變比較慢,然後開始減速;
- LinearInterpolator:動畫以均勻的速率改變。
AnimationSet共享
android:shareInterpolator=”true”“`
若不需共享,可設爲false,再在每個動畫裏單獨設置。
Frame-by-Frame Animations
這一類Animations可以創建一個Drawable序列,這些Drawable可以按照指定的時間間歇一個一個的顯示。
xml方式,在drawable文件夾中新建
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/a_01" android:duration="50"/>
<item android:drawable="@drawable/a_02" android:duration="50"/>
<item android:drawable="@drawable/a_03" android:duration="50"/>
<item android:drawable="@drawable/a_04" android:duration="50"/>
<item android:drawable="@drawable/a_05" android:duration="50"/>
<item android:drawable="@drawable/a_06" android:duration="50"/>
</animation-list>```
java代碼
```objc
imageView.setBackgroundResource(R.anim.anim);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
animationDrawable.start();```
<div class="se-preview-section-delimiter"></div>
## AnimationListener
在動畫執行的各個階段會得到通知,從而調用相應的方法:
- onAnimationEnd(Animation animation) - 當動畫結束時調用
- onAnimationRepeat(Animation animation) - 當動畫重複時調用
- onAniamtionStart(Animation animation) - 當動畫啓動時調用
<div class="se-preview-section-delimiter"></div>
## LayoutAnimationsController
LayoutAnimationsController可以用於實現使多個控件按順序一個一個的顯示。
- LayoutAnimationsController用於爲一個layout裏面的控件,或者是一個ViewGroup裏面的控件設置統一的動畫效果。
- 每一個控件都有相同的動畫效果。
- 控件的動畫效果可以在不同的時間顯示出來。
- LayoutAnimationsController可以在xml文件當中設置,以可以在代碼當中進行設置。
<div class="se-preview-section-delimiter"></div>
#### xml中使用
創建layoutAnimation爲根元素的xml文件
- android:delay - 動畫間隔時間;子類動畫時間間隔 (延遲) 70% 也可以是一個浮點數 如“1.2”等
- android:animationOrder - 動畫執行的循序(normal:順序,random:隨機,reverse:反向顯示)
- android:animation – 引用動畫效果文件
<div class="se-preview-section-delimiter"></div>