ロゴアクティビティとメインアクティビティの間の移行効果をコード化していますが、アクティビティが消滅する前にトップに移動するという問題があります。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shareInterpolator="false" >
<alpha
Android:duration="2000"
Android:fromAlpha="0.0"
Android:toAlpha="1.0" >
</alpha>
</set>
このコードを改善して、消失効果のみを取得するにはどうすればよいですか?
独自の。xmlアニメーションファイルを作成して、新しいActivity
をフェードインし、現在のActivity
をフェードアウトできます。
fade_in.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:interpolator="@Android:anim/accelerate_interpolator"
Android:fromAlpha="0.0" Android:toAlpha="1.0"
Android:duration="500" />
fade_out.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:interpolator="@Android:anim/accelerate_interpolator"
Android:fromAlpha="1.0" Android:toAlpha="0.0"
Android:fillAfter="true"
Android:duration="500" />
そのようなコードでそれを使用してください:(あなたのActivity
の中)
Intent i = new Intent(this, NewlyStartedActivity.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
上記のコードは、現在アクティブなActivity
をフェードアウトし、新しく開始されたActivity
をフェードインして、スムーズな移行を実現します。
UPDATE:@Dan Jは、組み込みのAndroidアニメーションを使用すると改善することを指摘しましたperformance。テストを行った後、実際にそうなることがわかりました。組み込みのアニメーションを使用する場合は、次を使用します。
overridePendingTransition(Android.R.anim.fade_in, Android.R.anim.fade_out);
リソースIDにアクセスするために、R
の代わりにAndroid.R
を参照していることに注意してください。
UPDATE:現在、 APIレベル19で導入された遷移クラス を使用して遷移を実行することが一般的です。
また、overridePendingTransitionが一部のモバイルで機能しないか、デバイスの設定に依存するため、onCreateメソッドで以下のようにアクティビティにアニメーションを追加することもできます...
View view = findViewById(Android.R.id.content);
Animation mLoadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), Android.R.anim.fade_in);
mLoadAnimation.setDuration(2000);
view.startAnimation(mLoadAnimation);
再投稿するだけ oleynikd で答える
Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(),
Android.R.anim.fade_in, Android.R.anim.fade_out).toBundle();
startActivity(intent, bundle);
style.xmlファイルでこのコードを使用することもできるため、activity.Javaに他の何かを書く必要はありません。
<!-- 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/colorAccent</item>
<item name="Android:windowAnimationStyle">@style/AppTheme.WindowTransition</item>
</style>
<!-- Setting window animation -->
<style name="AppTheme.WindowTransition">
<item name="Android:windowEnterAnimation">@Android:anim/fade_in</item>
<item name="Android:windowExitAnimation">@Android:anim/fade_out</item>
</style>
SetContentViewの直後に次の行を追加します。
overridePendingTransition(Android.R.anim.fade_in, Android.R.anim.fade_out);
アクティビティにフェードインとフェードアウトのアニメーションを追加します。アニメーションは既にAndroidシステムによって提供されているため、再作成する必要はありません。
それがあなたを助けることを願っています:)