{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671508803897,"data":{"id":71713315,"title":"2.4.3 MapSurfaceView","slug":"miglg9","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"

场景图

\"image.png\"

说明:

MapSurfaceView,为AutoSDK封装Android的SurfaceView,用于和MapDevice,MapView进行绑定。减少外部对接成本。绑定后外部无须关注手势事件,生命周期以及网络状态等。

时序图

地图服务初始化

地图设备创建

地图视图创建

创建


销毁

核心接口

// MapSurfaceView绑定地图设备\nvoid com.autonavi.gbl.map.adapter.MapSurfaceView.setDefaultDevice(\n    MapDevice device\n)\n\n// MapSurfaceView绑定地图视图\nvoid com.autonavi.gbl.map.adapter.MapSurfaceView.setDefaultMapView(\n    MapView mapview\n)\t\n\n// MapSurfaceView绑定地图服务\nvoid com.autonavi.gbl.map.adapter.MapSurfaceView.setMapService(\n    MapService mapService\n)

   说明:函数详情,请复制函数名称到在线API搜索

调用示例

 <!--  activity_main.xml绑定 -->\n<com.autonavi.gbl.map.adapter.MapSurfaceView\n        android:id="@+id/mapView"\n        android:layout_width="match_parent"\n        android:layout_height="match_parent" />
// 获取绑定的MapSurfaceView\nMapSurfaceView glMapSurface = findViewById(R.id.mapView);\n\n// 绑定地图服务,mapService参见地图初始化服务\nglMapSurface.setMapService(mapService);\n// 绑定地图设备,mapDevice参见创建地图设备\nglMapSurface.setDefaultDevice(mapDevice);\n// 绑定地图视图,mapView参见创建地图视图\nglMapSurface.setDefaultMapView(mapView);

MapSurfaceView源码

/**\n* @file        MapSurfaceView.java\n* @brief       地图surfaceview\n*/\n\npublic class MapSurfaceView extends SurfaceView implements SurfaceHolder.Callback, NetworkState.NetworkChangeListener {\n    private MapService mMapService = null;\n    private MapDevice mDefaultDevice = null;\n    private MapView mMapView = null;\n    private Context mContext;\n    private NetworkState mNetworkState = null;\n    /**\n     * @brief   获取map服务\n     */\n    public MapService getMapService()\n    {\n        return mMapService;\n    }\n    /**\n     * @brief   设置map服务\n     */\n    public void setMapService(MapService mapService)\n    {\n        mMapService = mapService;\n    }\n    /**\n     * @brief   设置默认map绘制设备\n     */\n    public void setDefaultDevice(MapDevice device)\n    {\n        mDefaultDevice = device;\n    }\n    /**\n     * @brief   设置默认mapview\n     */\n    public void setDefaultMapView(MapView mapview)\n    {\n        mMapView = mapview;\n    }\n    /**\n     * @brief   获取默认map绘制设备\n     */\n    public MapDevice getDefaultDevice()\n    {\n        return mDefaultDevice;\n    }\n\n    private void initNetworkState()\n    {\n        if (mNetworkState == null) {\n            mNetworkState = new NetworkState();\n        }\n        if (mNetworkState != null) {\n            mNetworkState.setNetworkListener(this);\n            mNetworkState.registerNetChangeReceiver(mContext.getApplicationContext(), true);\n            boolean isConnected = NetworkState.isNetworkConnected(mContext.getApplicationContext());\n            if (mMapService != null) {\n                mMapService.setNetworkType(isConnected ? NetworkStatus.NetworkStatusWiFi : NetworkStatus.NetworkStatusNotReachable);\n            }\n        }\n    }\n\n    private void uninitNetworkState()\n    {\n        if (mNetworkState != null) {\n            mNetworkState.registerNetChangeReceiver(mContext.getApplicationContext(), false);\n        }\n    }\n    /**\n     * @brief   网络状态改变回调函数\n     */\n    @Override\n    public void networkStateChanged(Context context)\n    {\n        if (mMapService != null) {\n            boolean isConnected = NetworkState.isNetworkConnected(context);\n            if (mMapService != null) {\n                mMapService.setNetworkType(isConnected ? NetworkStatus.NetworkStatusWiFi : NetworkStatus.NetworkStatusNotReachable);\n            }\n            if (mDefaultDevice != null) {\n                mDefaultDevice.resetTickCount(6);\n            }\n        }\n    }\n    /**\n     * @brief   地图Surface类构造\n     */\n    public MapSurfaceView(Context context)\n    {\n        super(context);\n        mContext = context;\n        getHolder().addCallback(this);\n    }\n\n    /**\n     * @brief   地图Surface类构造\n     */\n    public MapSurfaceView(Context context, AttributeSet attrs)\n    {\n        super(context, attrs);\n        mContext = context;\n        getHolder().addCallback(this);\n    }\n\n    /**\n     * @brief   地图surface附加到窗体回调\n     */\n    @Override\n    protected void onAttachedToWindow()\n    {\n        super.onAttachedToWindow();\n    }\n\n    /**\n     * @brief   地图surface与窗体解绑回调\n     */\n    @Override\n    protected void onDetachedFromWindow()\n    {\n        if (null != mMapService) {\n        }\n        super.onDetachedFromWindow();\n    }\n\n    /**\n     * @brief   地图surface创建\n     */\n    @Override\n    public void surfaceCreated(SurfaceHolder holder)\n    {\n        if (null != mDefaultDevice) {\n            mDefaultDevice.detachSurfaceFromDevice();\n            EGLSurfaceAttr surfaceAttr = new EGLSurfaceAttr();\n            surfaceAttr.display = -1;\n            surfaceAttr.nativeWindow = mDefaultDevice.getWindowFromSurface(holder.getSurface());\n            surfaceAttr.width = getWidth();\n            surfaceAttr.height = getHeight();\n            surfaceAttr.shareDeviceID = -1;\n\n            surfaceAttr.isBackSurface = false;\n            surfaceAttr.isNeedInitDraw = true;\n            surfaceAttr.isOnlyCreatePBSurface = false;\n            surfaceAttr.initColor = mSurfaceAttribute.initColor;\n\n            surfaceAttr.isNativeWindowFromSurface = true;\n            mDefaultDevice.attachSurfaceToDevice(surfaceAttr);\n            initNetworkState();\n        }\n    }\n\n    /**\n     * @brief   地图surface属性改变\n     */\n    @Override\n    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)\n    {\n        if (null != mDefaultDevice) {\n            EGLSurfaceAttr surfaceAttr = new EGLSurfaceAttr();\n            surfaceAttr.display = -1;\n            surfaceAttr.nativeWindow = mDefaultDevice.getWindowFromSurface(holder.getSurface());\n            surfaceAttr.width = width;\n            surfaceAttr.height = height;\n            surfaceAttr.shareDeviceID = -1;\n\n            surfaceAttr.isBackSurface = false;\n            surfaceAttr.isNeedInitDraw = true;\n            surfaceAttr.isOnlyCreatePBSurface = false;\n            surfaceAttr.initColor = mSurfaceAttribute.initColor;\n\n            surfaceAttr.isNativeWindowFromSurface = true;\n            mDefaultDevice.changeDeviceSize(surfaceAttr);\n        }\n    }\n\n    private EGLSurfaceAttr mSurfaceAttribute = new EGLSurfaceAttr();     /* 记录主屏的surface attibute */\n\n    /**\n     * @brief        获取Surface属性,hmi可以直接修改,在surfacecreate的时候,使用这个属性设置给引擎\n     */\n    public EGLSurfaceAttr getGLSurfaceAttribute() {\n        return mSurfaceAttribute;\n    }\n\n    /**\n     * @brief   地图surface销毁\n     */\n    @Override\n    public void surfaceDestroyed(SurfaceHolder holder)\n    {\n        if (null != mDefaultDevice) {\n            uninitNetworkState();\n            mDefaultDevice.detachSurfaceFromDevice();\n        }\n    }\n\n    /**\n     * @brief   view大小改变回调\n     */\n    @Override\n    protected void onSizeChanged(int w, int h, int oldw, int oldh)\n    {\n        super.onSizeChanged(w, h, oldw, oldh);\n    }\n\n    /**\n     * @brief   窗口可视化改变回调\n     */\n    @Override\n    protected void onWindowVisibilityChanged(int visibility)\n    {\n        super.onWindowVisibilityChanged(visibility);\n    }\n\n    /**\n     * @brief        添加子视图View\n     * @param[in]     engineID  引擎ID\n     * @param[in]     child     子视图View\n     * @param[in]     params LayoutParams\n     */\n    public void addView(int engineID, View child, FrameLayout.LayoutParams params)\n    {\n        if ((null == child) || (null == params)) {\n            return;\n        }\n\n        ((ViewGroup)getParent()).addView(child, params);\n    }\n\n    /**\n     * @brief        删除子视图View\n     * @param[in]     engineID  引擎ID\n     * @param[in]     child     子视图View\n     */\n    public void removeView(int engineID, View child)\n    {\n        if (null == child) {\n            return;\n        }\n        ((ViewGroup)getParent()).removeView(child);\n    }\n\n    @Override\n    public boolean onTouchEvent(MotionEvent event)\n    {\n        if (null != mMapView) {\n            mMapView.addTouchEvent(MapHelper.getMotionEventHelper().translateMotionEvent(event));\n            return true;\n        }\n        return false;\n    }\n}


","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:01:22","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":178,"collectCount":0,"estimateDate":17,"docStatus":0,"permissions":true,"overView":false}}