在fragment里创建flutterview后开启新的fragment闪烁或者无效问题

之前项目里集成了flutter,由于我们的项目是单activity多fragment的结构(似乎google最近也开始疯狂推这个结构),理所当然的把flutterview嵌到一个fragment里。然后当渲染这个fragment的时候出现黑屏闪烁,这是由于flutterview是继承surfaceview的,surfaceview初次渲染的时候自然会产生黑屏。搜了一下解决方案可以通过setZOrderOnTop解决,然而当设置了zorder之后如果在当前fragment上再启动别的fragment会出现无效的情况。最后跟进surfaceview源码,发现只要把flutterview设置一个背景透明色就可以完美的解决这个问题。当然要配合 getWindow().setFormat(PixelFormat.TRANSLUCENT)。具体有机会后面再细说。

当这个问题解决之后我又遇到一个新的问题,那就是当我成功的从集成flutter页面的fragment跳转到原生的fragment后,再次跳转到flutter的fragment出现的却是上一次flutter页面的ui。仔细分析,感觉是surfaceview叠加导致的,因为虽然ui没有刷新,但是点击事件相关操作却是正常的。迫于时间毕竟紧,我找出了一个临时的work around方案,后续再继续跟进

  override fun onResume() {
        onResume()
        placeHolderView.background = null
        flutterView.visibility = View.VISIBLE
    }

    override fun onPause() {
        onPause()
        placeHolderView.background = BitmapDrawable(resources, flutterView.bitmap)
        //这里post的原因是为了改善切换时候的闪烁
        placeHolderView.post { flutterView.visibility = View.INVISIBLE }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容