Android使用Container Transform退出应用后视图残留问题求解
该问题是由于MainActivity在共享元素转场未完成时就提前销毁,导致系统转场渲染缓存没有正确释放,退出应用时就会出现视图残留。你可以通过以下方式修复:
方案1:推迟MainActivity销毁时机
移除startActivity后立即调用的finish(),改为监听共享元素退出转场完成后再销毁页面,修改后的MainActivity#onCreate代码如下:
window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS) setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback()) // 监听转场完成后销毁页面 window.sharedElementExitTransition?.addListener(object : Transition.TransitionListener { override fun onTransitionEnd(transition: Transition) { finish() transition.removeListener(this) } override fun onTransitionCancel(transition: Transition) { finish() transition.removeListener(this) } override fun onTransitionStart(transition: Transition) {} override fun onTransitionPause(transition: Transition) {} override fun onTransitionResume(transition: Transition) {} }) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val icon: View = findViewById(R.id.icon) icon.postDelayed({ val intent = Intent(this, NextActivity::class.java) val options = ActivityOptions.makeSceneTransitionAnimation( this, icon, "splash" ) startActivity(intent, options.toBundle()) // 删除原来此处的finish()调用 }, 300)
方案2:配置NextActivity退出转场
给NextActivity添加退出转场规则,避免退到桌面时触发异常渲染,修改后的NextActivity#onCreate代码如下:
window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS) setEnterSharedElementCallback(MaterialContainerTransformSharedElementCallback()) // 禁用不需要的共享元素回退转场,设置退出淡入动画 window.sharedElementReturnTransition = null window.exitTransition = Fade() super.onCreate(savedInstanceState) setContentView(R.layout.activity_next)
方案3:定制ROM兼容处理
一加等深度定制ROM对系统动画有额外修改,可在退出NextActivity时主动隐藏页面内容,规避残留问题:
override fun onBackPressed() { // 退到桌面时先隐藏根布局 findViewById<View>(android.R.id.content).alpha = 0f super.onBackPressed() }
可选校验项
检查你的Activity使用的主题是否配置了正确的转场开关:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <item name="android:windowActivityTransitions">true</item> <item name="android:windowIsTranslucent">false</item> </style>
内容的提问来源于stack exchange,提问作者Lee Chun Hoe
相关产品推荐
相关产品推荐

