2012-08-13 70 views
3

如何在切換活動時觸發單個視圖上的動畫? 也就是說如果用戶點擊一個按鈕進入下一頁,我想讓我的一些觀點飛離屏幕,並將背景交叉淡入到下一個屏幕,而不是將整個屏幕作爲一個整體進行動畫。如何在活動轉換上動畫個別視圖?

這可能嗎?如果是這樣,該怎麼辦? (我使用的是最新的API 4.1,並且它不必向後兼容)

編輯:目前,通過在onResume()中調用它來完成轉換動畫,但是當我按回來後,活動的切換速度比onPause()中啓動的任何動畫都要快,這讓我覺得有一個更好的方法/位置來做到這一點。

回答

2

重寫onResume()可以正常工作,但onPause/onStop在移動到下一個屏幕之前不會等待 動畫完成。

什麼都開始事件前。按鈕點擊需要在開始活動被調用之前開始動畫。

button.setOnClickListener(new ViewOnClickListener() { 

    @Override 
    void onClick(... { 

     // start animations 
     // wait till they are finished 
     // start activity 
    } 
}); 

由於每次啓動一個新的活動事件都將有動畫代碼我也建議將其移動到某種輔助類的,以避免所有的地方重複代碼。恩。

button1.setOnClickListener(new ViewOnClickListener() { 

    @Override 
    void onClick(... { 

     helper.AnimateViews(/* probably pass activity or context */); 

     // start activity 
    } 
}); 

button2.setOnClickListener(new ViewOnClickListener() { 

    @Override 
    void onClick(... { 

     helper.animateViews(/* probably pass activity or context */); 

     // start activity 
    } 
}); 

public class ViewAnimiationHelper { 

    public void animateViews(Activity activity) { 

     // find all views if not found then don't animate them 
     View view1 = activity.findViewById(R.id.view1); 

     if(view1 != null) { 

      // animate view 
     } 

     View view2 = activity.findViewById(R.id.view1); 

     if(view2 != null) { 

      // animate view 
     } 
    } 
} 

這是所有的sudo java代碼,但希望足以讓您明白。祝你好運!

2

您可以設置動畫(如幻燈片),當你喜歡這個活動之間進行切換:

  1. 在res文件夾,創建一個文件夾,動畫
  2. 例如,將兩個XML文件的幻燈片。

slide_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shareInterpolator="false"> 
     <translate android:fromXDelta="100%" android:toXDelta="0%" 
      android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="200"/> 
    </set> 

slie_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shareInterpolator="false"> 
     <translate 
     android:fromXDelta="100%" android:toXDelta="0%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="200" /> 
    </set> 
  1. 然後在你的Java代碼只是寫:

    Intent i = new Intent(YourActivity.this, OtherActivity.class); 
        this.startActivity(i); 
        overridePendingTransition(R.anim.slide_in, R.anim.slide_out); 
    

如果您正在測試在真實設備上,不要忘記進行播放動畫(設置 - >顯示 - >動畫 - >所有動畫)!

希望它能幫助:)

+0

這爲整個活動提供動畫,我正在尋找分別爲各個視圖設置動畫。 – 2012-08-13 20:36:14

+0

哦,對不起,我誤解了。你有看到這個嗎? http://developer.android.com/reference/android/view/ViewPropertyAnimator.html – 2012-08-13 20:38:50

+0

是的,但我需要知道如何在離開/啓動活動時觸發這種動畫。 – 2012-08-13 20:39:44