1. 程式人生 > >"Android中的動畫"-Android面試必問"精華技能點"彙總

"Android中的動畫"-Android面試必問"精華技能點"彙總

一.Android中的動畫有哪幾類,它們的特點和區別是什麼?

根據谷歌官方文件,動畫分為3種:

1.幀動畫/影象動畫(Drawable Animation)

  • 1.xml方式->配置一組圖片,動態播放

2.補間動畫(View Animation)

  • 1.位移動畫
  • 2.縮放動畫
  • 3.旋轉動畫
  • 4.透明動畫
  • 5.集合

3.屬性動畫(Property Animation)-是3.0之後才有的

  • 擁有補間動畫所有的功能

屬性動畫和補間動畫的區別:

  • 補間動畫:
    • 父容器不斷的繪製view,看起來像移動了效果,其實view沒有變化,還在原地
  • 屬性動畫:
    • 是通過不斷改變自己view的屬性值
      ,真正的改變view.
  • 兩者的程式碼寫法如下:
//補間動畫
public void clickViewAnimation(View view) {
    //位移動畫,x方向不變,y有0->250
    TranslateAnimation animation = new TranslateAnimation(0, 0, 0, 250);
    //時長
    animation.setDuration(2000);
    //停在結果位置
    animation.setFillAfter(true);
    //控制元件開始動畫,傳入動畫
    iv.startAnimation(animation);
}
//屬性動畫
public void clickViewProperty(View view) { //動畫物件:控制元件以及動畫的型別都寫在裡面,然後是一組"不盡"的陣列:比如Y方向的0->250又上又下 ObjectAnimator animator = ObjectAnimator.ofFloat(iv, "translationY", 0, 250, 100, 200, 250); //時長 animator.setDuration(5000); //物件開始 animator.start(); } //測試他兩的區別 public void clickIv(View view) { Toast.makeText(this
, "點選了圖片", Toast.LENGTH_SHORT).show(); }

動畫插入器是什麼?

  • 是各種效果實現所要用到的,比如加速,比如來回擺動等等
  • 用法是:(一句程式碼)直接在動畫開始前設定即可:
animation.setInterpolator(new XXXInterpolator())

二.如何修改Activity進入和退出動畫

(可以通過兩種方式):

一通過定義Activity的主題

在styles.xml中編輯如下程式碼:

<style name="AnimationActivity" parent="@android:style/Animation.Activity"> 
  <item name="android:activityOpenEnterAnimation">@anim/slide_in_left</item> 
  <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> 
  <item name="android:activityCloseEnterAnimation">@anim/slide_in_right</item> 
  <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item> 
</style>

新增themes.xml檔案:

<style name="ThemeActivity"> 
  <item name="android:windowAnimationStyle">@style/AnimationActivity</item> 
  <item name="android:windowNoTitle">true</item> 
</style>

二通過覆寫Activity的overridePendingTransition 方法。

overridePendingTransition(R.anim.fade, R.anim.hold);
@Override
public void overridePendingTransition(int enterAnim, int exitAnim) {
    super.overridePendingTransition(enterAnim, exitAnim);
}