解决Flutter混合开发原生页面跳转Flutter页面黑屏的问题

在Flutter混合开发入门这篇文章中我们介绍了如何在原来的原生项目中集成Flutter,实现了从原生页面跳转flutter页面的功能

但是在页面跳转的过程中出现黑屏的问题

方法一

增加调用flutterView.setZOrderOnTop(true)和flutterView.getHolder().setFormat(PixelFormat.TRANSLUCENT)

public class FlutterActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_flutter);

        FlutterView flutterView = Flutter.createView(FlutterActivity.this, getLifecycle(), "route1");
        flutterView.setZOrderOnTop(true);
        flutterView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
        setContentView(flutterView);
    }
}

方法二

先隐藏FlutterView,显示加载进度圈

监听FlutterView的加载,当第一帧加载成功后显示再显示FlutterView

public class FlutterActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_flutter);

        ProgressBar progress = findViewById(R.id.progress);
        FrameLayout container = findViewById(R.id.container);
        View flutterView = Flutter.createView(FlutterActivity.this, getLifecycle(), "route1");
        FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
        container.addView(flutterView, layout);
        ((FlutterView) flutterView).addFirstFrameListener(new FlutterView.FirstFrameListener() {
            @Override
            public void onFirstFrame() {
                progress.setVisibility(View.INVISIBLE);
                container.setVisibility(View.VISIBLE);
            }
        });
    }
}

布局如下



    
    

 

你可能感兴趣的:(Flutter)