AndroidのActivity跳轉數據通信和跳轉動畫

1.當由一個ActivityA進入另一個ActivityB 的時候,ActivityA彈出等待對話框,表示將要進入第二個Activity,當我們按返回鍵的時候,將從ActivityB返回到ActiviyA,如果在ActivityA直接startActivity的畫,Activity的對話框還在轉,我們可以用startActivityForResult啟動Activity,不過要在ActivityB中調用瞭finish方法才會返回消息給前一個Activity,在ActivityB中設置返回結果,在ActivityA中復寫onActivityResult得到返回消息。

。ActivityA:

 1 @Override
 2     public void onClick(View v) {
 3         // TODO Auto-generated method stub
 4         if(v==bt){
 5             Intent intent = new Intent(this,OtherActivity.class);
 6             intent.putExtra("other", "第二頁");
 7             startActivityForResult(intent, 0);
 8             //dialog.show();
 9         }
10     }
11
12     @Override
13     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
14         // TODO Auto-generated method stub
15         super.onActivityResult(requestCode, resultCode, data);//請求碼,結果碼
16         if(resultCode==Activity.RESULT_OK){
17             Log.e("MainActivity", "onActivityResult");
18             dialog.dismiss();
19         }
20     }

 

ActivityB:

setResult(RESULT_OK);

 

2.這是考慮進入另一個Activity比較遲緩,特別是MapActivity加載地圖,試想可以在onCreate方法裡,調用super()之後彈出一個對話框,然後在視圖加載完成回調裡關閉對話框,onWindowFocusChange()裡dismisDialog似乎沒用,它還在轉,肯對話框在show時,就在加載View。

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        dialog = new ProgressDialog(this);
        dialog.show();

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        // TODO Auto-generated method stub
        super.onWindowFocusChanged(hasFocus);
         if(hasFocus){
             //dialog.dismiss();
             Log.e("OtherActivity", "加載完畢");
         }else{
             Log.e("OtherActivity", "加載中..");
         }

失敗。

3.順便研究瞭一下Activity跳轉動畫,可以再Application節點下,應用動畫效果,這將讓所有Activity應用該動畫主題,也可以針對單個Activity應用動畫。新建Style文件,把windowAnimationStyle設置成寫好的動畫風格,而真正的動畫Style應該繼承Animation.Activity,然後在各項動畫子項裡面設置獨特的動畫。

 

style:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="ThemeActivity" mce_bogus="1"> 
        <item name="android:windowAnimationStyle">@style/AnimationActivity</item> 
        <item name="android:windowNoTitle">false</item> 
    </style> 
          
   <style name="AnimationActivity" parent="@android:style/Animation.Activity" mce_bogus="1"> 
      
     <-進入一個Acitvity包括兩部分,當前Activity退出動畫,下個個Activity進入動畫->
        <item name="android:activityOpenEnterAnimation">@anim/enter_out</item>  //下個Activty進入動畫
        <item name="android:activityOpenExitAnimation">@anim/enter_in</item> //當前Activity退出的動畫

    <-跳回一個Activity也包括兩部分,當前Activity摧毀動畫,上個Actiivty進入動畫->
       <item name="android:activityCloseEnterAnimation">@anim/in</item>  //上個Activity進入動畫
       <item name="android:activityCloseExitAnimation">@anim/out</item>   //當前Activity退出動畫
  
    </style>
   
</resources>

 

這是我定義的動畫:

進入下個Activity,當前Activity往左撤出屏幕,下個Activity從底部上升至屏幕頂部。回返Activity的效果是仿照滬江應用的,當前Activity縮小到偏右方消失,透明度從有到無,前一個Activity從1.5倍縮放到正常大小,但是以左上角為中心點縮放。

 

Open:

當前Acitivity摧毀動畫

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="https://schemas.android.com/apk/res/android">
   <translate android:fromXDelta="0"
       android:toXDelta="-400"
       android:duration="500"/>//這裡就是視圖從右往左撤出屏幕的動畫

    <alpha android:fromAlpha="1.0"
        android:toAlpha="0.5"
        android:duration="800"/>

</set>

下個Acitivity進入動畫

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="https://schemas.android.com/apk/res/android">
   
    <translate android:fromYDelta="800"
        android:toYDelta="0"
        android:duration="500" />//從底部上升動畫

    <alpha android:fromAlpha="0.1"
        android:toAlpha="1.0"
        android:duration="800"/>

</set>

 

Close:

 

當前Activity銷毀動畫

<?xml version="1.0" encoding="utf-8"?>
<set  xmlns:android="https://schemas.android.com/apk/res/android">
    <scale android:fromXScale="1.0"
        android:toXScale="0.5"
        android:fromYScale="1.0"
        android:toYScale="0.5"
        android:pivotX="75%"
        android:pivotY="50%"
        android:duration="800"
        android:interpolator="@android:anim/accelerate_interpolator"/>//縮放至屏幕右方

    <alpha android:fromAlpha="1.0"
        android:toAlpha="0.1"
        android:duration="800"/>
   
</set>

 

上個Actiivty進入動畫

 

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="https://schemas.android.com/apk/res/android">
   
    <scale android:fromXScale="1.5"
        android:toXScale="1.0"
        android:fromYScale="1.5"
        android:toYScale="1.0"
        android:duration="800"
        android:pivotX="100%"
        android:pivotY="100%"/>//縮小在左上方

</set>

You May Also Like