0

カスタムの翻訳アニメーションで新しいアクティビティを開始したいので、xmlのアニメーションでoverridePendingTransitionを使用します。プログラムでoverridePendingTransitionアニメーションを変更する

overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left) 

enter_from_right.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="350" /> 

活動遷移のためのプログラムでアニメーションを作成/変更する方法はありますか?この場合、特定の値で動的にXDeltaを変更してください。

+0

は、なぜ私はdownvotedたのですか? – moyo

+0

解決策を見つけました!以下に掲示される – moyo

答えて

0

いくつかの調査をした後、私は自分自身に答えるでしょう。

1 - AndroidManifestで次のテーマを設定して、 "透過的"な活動を作成します。これを行わない場合は、空白の画面が表示されます。

<style name="TransparentActivity" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
</style> 

2.ルートdecorViewにそれを適用し、手動でTranslationAnimation(またはしたいアニメーション)を作成し、同様にしてカスタムアニメーションを無効にします0にそれらを設定:

 overridePendingTransition(0, 0); 

     // Custom transition 
     TranslateAnimation translateAnimation = new TranslateAnimation(-translationLength, 0, 0, 0); 
     translateAnimation.setDuration(350); 
     translateAnimation.setFillAfter(true); 
     View rootView = getWindow().getDecorView().findViewById(android.R.id.content); 

     rootView.startAnimation(translateAnimation); 

     rootView.getLayoutParams().width = translationLength; 

あなたが逆のアニメーションonBackPressedをしたい場合、またはあなたの活動の終了時:

@Override 
public void finish() { 
     overridePendingTransition(0, 0); 
     TranslateAnimation translateAnimation = new TranslateAnimation(0, -translationLength, 0, 0); 
     translateAnimation.setDuration(350); 
     translateAnimation.setFillAfter(true); 
     translateAnimation.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       YourActivity.super.finish(); 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 

      } 
     }); 
     getWindow().getDecorView().findViewById(android.R.id.content).startAnimation(translateAnimation); 
} 
関連する問題