android 画面闪烁,android-活动之间的图像过渡时闪烁屏幕

android-活动之间的图像过渡时闪烁屏幕

我使用棒棒糖中的新共享元素在两个活动之间实现了图像过渡。 它正在工作,但是在过渡期间我在整个屏幕上都出现了奇怪的白色闪烁,而且我找不到如何消除它的方法。 这是一个例子:

111150ea15158060971df55c43e9e253.gif

这是第二项活动的启动方式

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());

}

然后在onCreate中:

ViewCompat.setTransitionName(mLogoView, mGame.gameFullId);

和主题文件:

true

true

true

@android:transition/move

@android:transition/move

谢谢你的帮助

11个解决方案

38 votes

在即将结束的活动中,致电getWindow().setEnterTransition(null);

在输入活动中,致电getWindow().setEnterTransition(null);

这将防止退出活动的淡出和进入活动的淡入,从而消除了明显的闪烁效果。

Kevin Lee answered 2020-01-27T11:18:46Z

18 votes

您看到的“白色闪烁”是过渡期间两个活动进行alpha动画输入和输出的结果:当活动A开始活动B,活动A淡出并且活动B淡入时。

如果要防止状态栏和/或导航栏在过渡期间褪色(从而稍微减少“闪烁”效果),可以查看此文章。

Alex Lockwood answered 2020-01-27T11:19:11Z

16 votes

我通过更改默认主题的背景色解决了此问题,希望这仍然可以帮助某人节省时间。

@color/black

@color/black

Webdma answered 2020-01-27T11:19:31Z

9 votes

在助手中做一些方法

public static Transition makeEnterTransition() {

Transition fade = new Fade();

fade.excludeTarget(android.R.id.navigationBarBackground, true);

fade.excludeTarget(android.R.id.statusBarBackground, true);

return fade;

}

像这样在开始的活动中执行它

getWindow().setEnterTransition(TransitionUtils.makeEnterTransition());

资源[https://github.com/alexjlockwood/custom-lollipop-transitions/]

Rzodkiewka answered 2020-01-27T11:20:00Z

3 votes

我遇到了类似的闪烁问题,并尝试了此处提到的许多示例,但对我而言,它并不能解决问题。 对我有用的是将第二个活动主题的窗口背景更改为透明。 (@Webdma使用黑色,但在我的情况下,使屏幕闪烁黑色而不是白色)

@android:color/transparent

Kasium answered 2020-01-27T11:20:20Z

2 votes

我有一个类似的问题。我按照@Alex的建议将其排除在转换之外,从而解决了状态栏和导航栏闪烁的问题,但是在活动之间进行切换时,屏幕仍然闪烁。 当我删除“完();” startActivity()之后的语句; 屏幕停止闪烁。可能是由于通话活动结束所致。   希望这对某人有帮助。

Neanderthal answered 2020-01-27T11:20:40Z

2 votes

以上是一些有用的答案。据我了解,这是由活动过渡重叠引起的。 为了克服这个问题,我在两种活动的onCreate()方法中都使用了以下值:

getWindow().setAllowEnterTransitionOverlap(false);

getWindow().setAllowReturnTransitionOverlap(false);

Randeep answered 2020-01-27T11:21:00Z

1 votes

在我的情况下,第二个活动没有在活动主题中使用此标签定义的状态栏。

true

由于在纵向模式下隐藏状态栏不是强制性的,因此我删除了此标签,并在需要时手动隐藏/显示状态栏,并且闪烁消失了。

JDenais answered 2020-01-27T11:21:25Z

1 votes

将这些代码添加到您在其中执行Transition元素的两个Activity的onCreate中

Fade fade = new Fade();

View decor = getWindow().getDecorView();

fade.excludeTarget(decor.findViewById(R.id.action_bar_container),true);

fade.excludeTarget(android.R.id.statusBarBackground,true);

fade.excludeTarget(android.R.id.navigationBarBackground,true);

getWindow().setEnterTransition(fade);

getWindow().setExitTransition(fade);

这将从导航和状态栏中排除动画,因此不再闪烁

Eldhopj answered 2020-01-27T11:21:49Z

0 votes

元素淡入和淡出,除非您明确指定两个活动中的元素相同。 其中包括状态和导航栏。

在您的特定情况下,我将工具栏和这两个视图添加到共享元素列表中:

List viewPairs = new ArrayList<>();

viewPairs.add(Pair.create(findViewById(android.R.id.statusBarBackground), Window.STATUS_BAR_BACKGROUND_TRANSITION_NAME));

viewPairs.add(Pair.create(findViewById(android.R.id.navigationBarBackground), Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME));

// Add your views...

Pair[] array = new Pair[viewPairs.size()];

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), viewPairs.toArray(array)).toBundle();

// ...

ActivityCompat.startActivity(activity, intent, options.toBundle());

gatti answered 2020-01-27T11:22:14Z

0 votes

在您的style.xml中添加它。 这样可以防止屏幕闪烁

true

Rohan buddy answered 2020-01-27T11:22:34Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值