【问题标题】:Fragment's layout blinks after launching activity and calling finish() on the old activity启动活动并在旧活动上调用完成()后,片段的布局会闪烁
【发布时间】:2017-12-17 21:29:00
【问题描述】:

我在启动新活动后对片段的活动调用完成()。问题是,在完成旧活动时,调用该方法时会显示布局及其完成的动画。

我试图先完成,但我能看到它太可怕了。

代码:

    if(getActivity() != null){
        Glide.with(getActivity()).load(R.mipmap.ic_launcher).into(mIcon);
        Animation myFadeInAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.anim_splash_icon_pulse_scale);
        mIcon.startAnimation(myFadeInAnimation);

        int mRandom = new Random().nextInt(mMemesArray.length);
        mMemeText.setText(mMemesArray[mRandom]);

        try{
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    Intent intent = new Intent(getActivity(), ActivityMain.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    getActivity().startActivity(intent);

                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            getActivity().finish();
                        }
                    },1000 * 2);
                }
            },1000 * 3);
        } catch (Exception e){
            e.printStackTrace();
        }
    }

我试图删除视图,取消动画 ImageView。有同样的结果。

【问题讨论】:

标签: android android-fragments


【解决方案1】:

据我了解,这是由活动转换重叠引起的。为了克服这个问题,我在两个活动的 onCreate() 方法中使用了以下值:

getWindow().setAllowEnterTransitionOverlap(false);
getWindow().setAllowReturnTransitionOverlap(false);

【讨论】:

  • 我项目中的 min-api 是 16,所以这个解决方案不起作用。我通过在捆绑包中添加淡入淡出动画并将其附加到意图来解决了这个问题。淡入淡出动画的持续时间为 200,两个 alpha 字段的 alpha 为 1.0,因此淡入淡出动画不会发生,并且窗口在完成时不会重叠(经过测试,看起来很奇怪,但确实有效)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多