【Flutter原理】FlutterView相关源码分析

而在FlutterFragment中RenderMode是通过ARG_FLUTTERVIEW_RENDER_MODE参数来决定。

思考:为什么透明模式下使用RenderMode.texture,而不透明模式下使用RenderMode.surface

显而易见三种渲染模式对应的在FlutterView创建时以来不同的类,分别是:FlutterSurfaceView,FlutterTextureView,FlutterImageView。下面我们一起来看看这三个类。

FlutterSurfaceView分析

===================================================================================

从文中开头大致的类图关系我们知道FlutterSurfaceView、FlutterTextureView和FlutterImageView都是FlutterView的一个成员变量,通过构造函数根据不同的渲染模式传递对应的参数对FlutterView进行初始化。

//继承自SurfaceView,实现RenderSurface接口

public class FlutterSurfaceView extends SurfaceView implements RenderSurface {

private final SurfaceHolder.Callback surfaceCallback =

new SurfaceHolder.Callback() {

@Override

public void surfaceCreated(@NonNull SurfaceHolder holder) {

//…

connectSurfaceToRenderer();

}

@Override

public void surfaceChanged(

@NonNull SurfaceHolder holder, int format, int width, int height) {

//…

changeSurfaceSize(width, height);

}

@Override

public void surfaceDestroyed(@NonNull SurfaceHolder holder) {

//…

disconnectSurfaceFromRenderer();

}

};

private void connectSurfaceToRenderer() {

if (flutterRenderer == null || getHolder() == null) {

throw new IllegalStateException(

“connectSurfaceToRenderer() should only be called when flutterRenderer and getHolder() are non-null.”);

}

flutterRenderer.startRenderingToSurface(getHolder().getSurface());

}

/**

  • 当 FlutterSurfaceView 想要开始将 Flutter UI 渲染到此 FlutterSurfaceView 时,由此 FlutterSurfaceView 的所有者调用。

  • 如果 Android android.view.Surface 可用,则此方法会将 android.view.Surface 提供给给定的 FlutterRenderer 以开始将 Flutter 的 UI 渲染到此 *FlutterSurfaceView。

  • 如果还没有 Android android.view.Surface 可用,则此 FlutterSurfaceView 将等到 android.view.Surface 可用,然后将该

  • android.view.Surface 提供给给定的 FlutterRenderer 以开始将 Flutter 的 UI 渲染到此 FlutterSurfaceView。

*/

public void attachToRenderer(&#

你可能感兴趣的:(程序员,flutter)