【问题标题】:Android Fragments transition issueAndroid Fragments 过渡问题
【发布时间】:2017-09-22 04:46:27
【问题描述】:

使用以下代码从一个片段 HelloAfragment 转换到 HelloBfragment 时,如何在从 HelloAfragment 转换到 HelloBfragment 时添加延迟

   TAG = HelloFrament.class.getSimpleName();
   fragmentManager.beginTransaction()
           .setCustomAnimations(R.anim.slide_in_left,R.anim.slide_out_right)
            .replace(HelloAfragment.getId(), HelloBfragment, TAG)
            .addToBackStack(TAG)
            .commit();

【问题讨论】:

  • 在 slide_in_left.xml 中更改 android:duration="700"
  • @mohitSuthar 我确实在 slide_in_left.xml 上添加了持续时间,但效果很好

标签: java android android-fragments animation fragment


【解决方案1】:

试试下面的代码

            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
            fragmentManager.addOnBackStackChangedListener(this);
            fragmentTransaction.replace(R.id.frame, firstFragment, "h");
            fragmentTransaction.addToBackStack("h");
            fragmentTransaction.commit();

【讨论】:

  • 将此代码用于android studio给出的动画..fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
【解决方案2】:

你只需要一点点改变,在 slide_in_left 中使用下面的代码

<translate xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/linear_interpolator"
       android:fromXDelta="1000" android:toXDelta="0"
       android:duration="700"/>

还有这个 slide_in_right 的代码

<translate xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_decelerate_interpolator"
       android:fromXDelta="0" android:toXDelta="-1000"
       android:duration="700"/>

【讨论】:

  • 我尝试了所有,最后最终使用了一个活动而不是片段
【解决方案3】:

我无法实现两个片段之间的转换,所以我最终将目标片段更改为活动并使用以下代码进行活动

       View imageView = findViewById(R.id.imageView);
    View textView = findViewById(R.id.textView);
    View button = findViewById(R.id.button);

    Intent intent = new Intent(this, EndActivity.class);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        textView.setTransitionName(getString(R.string.activity_text_trans));
        button.setTransitionName(getString(R.string.activity_mixed_trans));

        Pair<View, String> pair1 = Pair.create(imageView, imageView.getTransitionName());
        Pair<View, String> pair2 = Pair.create(textView, textView.getTransitionName());
        Pair<View, String> pair3 = Pair.create(button, button.getTransitionName());
        ActivityOptionsCompat options = ActivityOptionsCompat.
                makeSceneTransitionAnimation(this, pair1, pair2, pair3);
        startActivity(intent, options.toBundle());
    }
    else {
        startActivity(intent);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 2012-04-08
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多