2012-04-20 14 views
35

アクティビティを変更したときにスライドエフェクトを左から右に移動したい場合は、次のコード を使用していますが、結果が得られません。私を修正してください。 おかげJavaで Androidの2つのアクティビティ間でスライドアニメーションを適用するにはどうすればよいですか?

両方のファイル解像度で

super.onCreate(savedInstanceState); 
overridePendingTransition(R.anim.fadein, R.anim.fadeout); 
setContentView(R.layout.main); 

二つのファイル/ディレクトリアニメーション
fadein.xml

<?xml version="1.0" encoding="utf-8"?> 
<alpha 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:duration="5000" 
android:fromAlpha="0.0" 
android:interpolator="@android:anim/slide_out_right" 
android:toAlpha="1.0" > 
</alpha> 

fadeout.xml

<?xml version="1.0" encoding="utf-8"?> 
<alpha 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:duration="5000" 
android:fromAlpha="0.0" 
android:interpolator="@android:anim/slide_in_left" 
android:toAlpha="1.0" > 
</alpha> 
+0

私はこのコードを使用しました: 'overridePendingTransition(android.R.anim.fade_in、android.R.anim.fade_out);'あなたは[GmailAnimation](https://github.com/CabezasGonzalezJavier/GmailAnimation)でこれらの例を見ることができます。 )または[LopeAnimations](https://github.com/CabezasGonzalezJavier/LopeAnimations)を参照してください。また、この[ブログ](http://thedeveloperworldisyours.com/android/gmail-overriding-pending-transition/#sthash.CEhJwJLg.dpbs)でさらに詳しく見ることができます。 – Cabezas

答えて

26
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splashscreen); 

     new Handler().postDelayed(new Runnable() { 
      public void run() { 

        /* Create an intent that will start the main activity. */ 
        Intent mainIntent = new Intent(SplashScreen.this, 
          ConnectedActivity.class); 
        mainIntent.putExtra("id", "1"); 

        //SplashScreen.this.startActivity(mainIntent); 
        startActivity(mainIntent); 
        /* Finish splash activity so user cant go back to it. */ 
        SplashScreen.this.finish(); 

        /* Apply our splash exit (fade out) and main 
         entry (fade in) animation transitions. */ 
        overridePendingTransition(R.anim.mainfadein,R.anim.splashfadeout); 
      } 
    }, SPLASH_DISPLAY_TIME); 
    } 
120

この2つのファイルをres/animフォルダに追加します。

slide_in.xml

  <?xml version="1.0" encoding="utf-8"?> 
      <translate 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:duration="@android:integer/config_longAnimTime" 
        android:fromXDelta="100%p" 
        android:toXDelta="0%p"> 
      </translate> 

slide_out.xml

  <?xml version="1.0" encoding="utf-8"?> 
      <translate 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:duration="@android:integer/config_longAnimTime" 
       android:fromXDelta="0%p" 
       android:toXDelta="-100%p"> 
      </translate> 

そして、あなたがテントを通過し、次の活動ののonCreate()メソッドに次のコードを記述します。

  overridePendingTransition(R.anim.slide_in, R.anim.slide_out); 
+0

jignesh:この回答があなたに役立つ場合は、正しいとマークしてください。 –

+7

ありがとうございました - 戻るボタンを押して古いアクティビティに戻ったときに、逆のアニメーションをどこに配置すればいいですか? –

+0

ありがとう、これは本当にうまくいった –

28

デフォルトのアクティビティアニメーションを上書きすることができ、overridePendingTransitionよりも優れたパフォーマンスを実現します。私はすべてのアンドロイド版で動作するこのソリューションを使用します。以下のように4つのファイルを貼り付けて4行のスタイルを追加してください:

"CustomActivityAnimation"を作成し、これをベーステーマに "windowAnimationStyle"で追加してください。

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorPrimary</item> 
    <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> 

</style> 

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

その後のresフォルダの下にアニメーションのフォルダを作成し、アニメーションフォルダにこの4つのアニメーションファイルを作成します。

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="-100%p" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_in_leftを.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="-100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="100%p" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

あなたはどんな問題に直面した場合、あなたは私のsample project from githubをダウンロードすることができます。

おかげ

+0

ありがとうございました! –

+2

はadnroid 6(huawei p8)で動作しません – qkx

+1

私はアンドロイド6ファウワイとそのパフォーマンスが非常によく使用しています。 :) –

0

あなたはstartActivityの代わりonCreateoverridePendingTransitionを使用することができます。少なくとも、それは私のために働く!

完全な例hereを参照してください。 BackPressedに(逆の)アニメーションが含まれているので、前のアクティビティに戻ります!あなたの特定の例では(フェードインとアウト)は不要かもしれません。

関連する問題