2013-12-19 49 views
16

我很難搞清楚如何通過按動按鈕來滑動活動。我想要的是用戶按下按鈕,然後屏幕滑動。我想要的方式是第一個活動(帶按鈕的活動)向左滑動,而新的第二個活動從右側滑入。overridePendingTransition滑動活動進出順利

用下面的代碼,當按鈕被點擊時,第一個活動向右滑動,當我想讓它向左滑動時。然後當它完成滑動時,剩下的只是一秒鐘的黑屏,然後第二個活動剛剛出現並且不滑入。

所以第一個活動滑出錯誤的方向和下一個活動只是出現而不是滑動。我究竟做錯了什麼?我很難理解XML文件,所以聽到的是下面所有內容的代碼。

1日活動

@Override 
public void onCreate(Bundle savedInstanceState) { 

    playBtn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(MainMenu.this, Levels.class); 
      startActivity(intent); 
      overridePendingTransition(R.anim.enter_from_right, R.anim.exit_out_left); 
     } 
    }); 

第二活性

@Override 
public void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.levels); 

    overridePendingTransition(R.anim.enter_from_left, R.anim.exit_out_right); 

所以我想,我的一些XML文件可能不正確。他們來了。

enter_from_left.xml

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate 
     android:duration="600" 
     android:fromXDelta="100%" 
     android:toXDelta="0%" > 
    </translate> 
</set> 

enter_from_right.xml

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate 
     android:duration="600" 
     android:fromXDelta="-100%" 
     android:toXDelta="0%" > 
    </translate> 
</set> 

exit_out_left.xml

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate 
     android:duration="600" 
     android:fromXDelta="0%" 
     android:toXDelta="-100%" > 
    </translate> 
</set> 

exit_out_right.xml

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate 
     android:duration="600" 
     android:fromXDelta="0%" 
     android:toXDelta="100%" > 
    </translate> 
</set> 

編輯 從第二個活動中刪除overridePendingTransition()使它成爲第一個活動向左滑出,這是我想要的。但是,當第一個活動滑出時,它仍然只是顯示一個黑屏,而不是第二個活動從右側滑入。

+2

你應該只需要一次覆蓋動畫,推新活動所以只有當。如果您從onCreate刪除覆蓋,它應該工作 – panini

+0

@panini檢查編輯到我的開放職位。你幫助解決了一個問題。 – Matt

+1

我認爲在你的enter_from_right動畫中,你的fromXDelta應該是100%,而不是-100% – panini

回答

14

而不是覆蓋startActivity()和新活動onCreate()中的動畫,只需要覆蓋startActivity()調用後面的動畫即可。

您爲overridePendingTransition(int enterAnim, int exitAnim)提供的兩個int對應於兩個動畫 - 刪除舊的Activity並添加新的動畫。

對於你的第二個問題,我相信你有fromXDelta設置錯誤,-100%應該是一路關閉左側一側的屏幕,而不是正確的,所以改變這個100%應該修復它。

+1

overridePendingTransition將enterAnim作爲第一個參數。 –

+0

oops。現在修復 – panini

1

不僅在enter_from_right動畫中有一個錯誤,應該有100%的fromXDelta而不是-100%,但即使在enter_from_left動畫中,它應該具有-100%而不是100%的xDelta。

乾杯,

0

變化fromXDelta-100%enter_from_leftfromXDelta100%在你的代碼enter_from_right,這會給你一個正確的滑動動畫。

+0

正如我已經在上面的評論中說過的(評論是有用的,評論是有用的,通信..):) – mircobabini

-1

看看我的要點,它完美的作品:

1.Override CommonActivity的startActivity並完成

@Override 
    public void startActivity(Intent intent) { 
     super.startActivity(intent); 
     overridePendingTransition(R.anim.from_right_in, R.anim.from_left_out); 
    } 

    @Override 
    public void finish() { 
     super.finish(); 
     overridePendingTransition(R.anim.from_left_in, R.anim.from_right_out); 
    } 

2.from_left_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="-100%p" 
       android:toXDelta="0" 
       android:duration="300"/> 
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" /> 
    </set> 

3.from_right_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="100%p" 
       android:toXDelta="0"    android:interpolator="@android:interpolator/accelerate_decelerate" 
       android:duration="300"/> 
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" /> 
</set> 

4.from_left_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" 
       android:toXDelta="-100%p" 
       android:duration="300"/> 
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" /> 
</set> 

5.from_right_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" 
       android:toXDelta="100%p" 
       android:duration="300"/> 
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" /> 
</set> 

要點鏈接:https://gist.github.com/JagieChen/f5cc44bf663f3722bd19097be47ccf9b

+0

雖然這個鏈接可能回答這個問題,最好包括答案的重要部分,並提供該鏈接供參考。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/17697699) –

+0

感謝Pete Carter和Ronen Ness – Jagie