在活动之间的图像转换上闪烁屏幕

Leg*_*man 52 android material-design shared-element-transition

我使用来自棒棒糖的新共享元素在两个活动之间实现了图像转换.它正在工作但是在转换过程中我在整个屏幕上都出现了一个奇怪的白色闪烁,我找不到如何摆脱它.这是一个例子: 状态栏也闪烁

以下是第二个活动的启动方式

public static void launch(
            @NonNull Activity activity, @NonNull View transitionView, Game game) {
        ActivityOptionsCompat options =
                ActivityOptionsCompat.makeSceneTransitionAnimation(
                        activity, transitionView, game.gameFullId);
        Intent intent = new Intent(activity, ListImportationLoginActivity.class);
        intent.putExtra(INTENT_EXTRA_GAME, retailer);
        ActivityCompat.startActivity(activity, intent, options.toBundle());
    }
Run Code Online (Sandbox Code Playgroud)

然后在onCreate:

ViewCompat.setTransitionName(mLogoView, mGame.gameFullId);  
Run Code Online (Sandbox Code Playgroud)

和主题文件:

<resources>
    <style name="Theme.MyApp.NoActionBar" parent="Theme.MyApp.NoActionBar.Base">
        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">true</item>
        <item name="android:windowAllowReturnTransitionOverlap">true</item>
        <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
        <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
    </style>
</resources>  
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

Kev*_*Lee 39

在退出活动上,打电话 getWindow().setExitTransition(null);

在进入活动时,请致电 getWindow().setEnterTransition(null);

它将防止退出活动的淡出和进入活动的淡入,这消除了明显的眨眼效果.

  • 奇迹般有效 (2认同)
  • @kevinze 谢谢。在它不起作用之前它现在起作用了。我这边一票赞成。 (2认同)
  • 它消除了褪色效果。这就像扫一扫 (2认同)

Ale*_*ood 18

你看到的"白色眨眼"是两个活动在过渡期间进行动画制作的结果:当活动A开始活动时B,活动A淡出,活动B渐渐消失.

如果你想在转换过程中防止状态栏和/或导航栏褪色(从而减少"闪烁"效果),你可以查看这篇文章.


Web*_*dma 16

我通过改变我的默认主题的背景颜色来解决这个问题,希望这仍然可以帮助有人节省时间.

<item name="android:windowBackground">@color/black</item>
<item name="android:colorBackground">@color/black</item>
Run Code Online (Sandbox Code Playgroud)

  • 我使用了`@android:color/transparent`,感谢这个问题,因为所有其他人都会导致错误.干杯! (8认同)

小智 9

在帮助器中制作一些方法

public static Transition makeEnterTransition() {
    Transition fade = new Fade();
    fade.excludeTarget(android.R.id.navigationBarBackground, true);
    fade.excludeTarget(android.R.id.statusBarBackground, true);
    return fade;
}
Run Code Online (Sandbox Code Playgroud)

在你正在开始的活动中执行它

getWindow().setEnterTransition(TransitionUtils.makeEnterTransition());
Run Code Online (Sandbox Code Playgroud)

来源 https://github.com/alexjlockwood/custom-lollipop-transitions/