解决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);
            }
        });
    }
}

布局如下

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ProgressBar
        android:id="@+id/progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="invisible"/>
</FrameLayout>

 

posted @ 2019-10-09 17:21  野猿新一  阅读(214)  评论(0编辑  收藏  举报