web-dev-qa-db-ja.com

アクティビティ遷移が機能しない

アクティビティ遷移を実装しようとしていますが、効果を確認できません。これが私の最初のアクティビティのコードです:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_architecture);
        setUpWindowAnimations();
    }

private void setUpWindowAnimations() {
        if (Android.os.Build.VERSION.SDK_INT >= 21) {
            Log.i("ANIM", "Fade called");
            Fade fade = new Fade(2);
            fade.setDuration(3000);
            getWindow().setExitTransition(fade);
        }
    }

2番目のアクティビティのコードは次のとおりです。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image);
        setUpWindowAnimations();
    }

private void setUpWindowAnimations() {
        if (Android.os.Build.VERSION.SDK_INT >= 21) {
            Log.i("ANIM", "slide called");
            Slide slide = new Slide(Gravity.LEFT);
            slide.setDuration(3000);
            getWindow().setEnterTransition(slide);
        }
    }

フェードアウトアニメーションを設定しましたが、フェードはありません。また、スライドはデフォルトの方法で機能します。つまり、方向は左ではなく下になります。

ここ は私のvalues/style.xml and here is my v21/styles.xml

これが私のAndroidManifest.xml

<application
        Android:name=".MyApplication"
        Android:allowBackup="true"
        Android:hardwareAccelerated="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:largeHeap="true"
        Android:theme="@style/AppTheme">

これらのトランジションが機能しない理由と、それらを機能させる方法。 SOエディターがxmlを正しく表示していなかったため、 paste.ubuntu.com を使用しました。

17
Amit Tiwari
_Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this).toBundle();
this.startActivity(intent,bundle);
_

2つのアクティビティの間にインテントを設定した後、これらの2行を追加すると、これが機能します。

startActivity(intent)メソッドを介してアクティビティを開始するだけではなく、バンドルを使用してアクティビティ間の遷移を指定する必要があります。

41
Abhishek Tiwari

setContentViewの前にsetUpWindowAnimations();を宣言します。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setUpWindowAnimations();
        setContentView(R.layout.activity_architecture);

    }

private void setUpWindowAnimations() {
        if (Android.os.Build.VERSION.SDK_INT >= 21) {
            Log.i("ANIM", "Fade called");
            Fade fade = new Fade(2);
            fade.setDuration(3000);
            getWindow().setExitTransition(fade);
        }
    }

その他の解決策

xmlTransitionを作成し、このxmlコードをそこに配置します

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="1000"
    Android:interpolator="@Android:interpolator/accelerate_decelerate">
    <fade Android:fadingMode="fade_out"/>
    <slide Android:slideEdge="bottom"/>
</transitionSet>

これはApi21のスタイルである必要があります

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <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:windowContentTransitions">true</item>
        <item name="Android:windowTransitionBackgroundFadeDuration">1000</item>
    </style>
</resources>

次に、このコードをアクティビティのsetCreateViewの前に配置します

if (Build.VERSION.SDK_INT >= 21) {

            TransitionInflater inflater = TransitionInflater.from(this);
            Transition transition = inflater.inflateTransition(R.transition.transition_a);
            getWindow().setExitTransition(transition);
        }

これは、setCreateViewの前に他のアクティビティに含める必要があります

if(Build.VERSION.SDK_INT >= 21){
            Slide slide = new Slide();
            slide.setDuration(1000);
            getWindow().setEnterTransition(slide);
        }
1
Zeeshan Shabbir