{"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":"
说明:
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);
/**\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}