绘制配置项,开发者可以根据实际业务需要,定制各种UI展示,包括不同状态下小车、路线、路况、起终点等ICON、是否展示InfoWindow、是否自动进行地图最佳视野适配、覆盖物的压盖层级等,更多设置可以参考DisplayOptions类参考说明。
注意:如果使用SDK提供的默认绘制样式,则直接使用默认构造函数即可。但是如果自定义,传入参数为null,则会抛出参数异常。
DisplayOptions mDisplayOptions = new DisplayOptions()// 设置展示起点气泡信息Button startInfo = new Button(this);startInfo.setText("请在这里上车");startInfo.setBackgroundResource(R.drawable.infowindow);// 设置订单起点infoWindow的View控件 用户不设置则不做显示mDisplayOptions.setStartPositionInfoWindowView(startInfo);// 设置订单起点InfoWindow是否显示在地图上mDisplayOptions.showStartPositionInfoWindow(true);// 设置路线+路况是否显示在地图上mDisplayOptions.showRoutePlan(true);// 设置展示乘客当前的轨迹点// 如果开发者自己实现了乘客的轨迹点展示,则可以关闭该项。并且不需要再司乘同显中开启定位功能。否则需要开启定位// 功能,并把位置点传递给司乘同显mDisplayOptions.showPassengereIcon(true);// 设置使用3D小车模式。3D小车功能通过一系列不同角度的图片实现mDisplayOptions.set3DCarMarkerEnable(true);// 定义小车在不同角度下的状态,如果需要具体可以参考官网demo中示例List<BitmapDescriptor> carIconList = getCarIconList();//设置3D车标图片列表 3D Marker的Icon列表,需要开发者按照逆时针顺序(Maker的角度是逆时针)将不同角度的图片添加到List中, 所有图片角度需要均等分360度,即如果有10张图片(其中,360度的图片和0度图片重合,所以不放360角度图片。), 则每张图片按照36度间隔划分。mDisplayOptions.set3DCarMarkerIconList(carIconList);// 设置地图上子View距离地图View(布局)的边距mDisplayOptions.setMapViewPadding(200, 300, 200, 300);
在监听回调中可以获取到已行使的距离及时间、剩余的距离及时间、司机位置、乘客位置、错误处理结果等信息。
// sync监听类(已行使距离,时间,剩余距离,时间;司机位置,乘客位置,错误处理结果)private class MySyncDisplayListener implements SynchronizationDisplayListener {@Overridepublic void onRoutePlanInfoFreshFinished(float remainingDistance, long estimatedTime) { Button info = new Button(SynchronizationDemo.this); info.setBackgroundResource(R.drawable.infowindow); info.setWidth(300); info.setTextSize(10.0f); info.setText(String.format("剩余:%skm, 预计:%dmin", remainingDistance / 1000, estimatedTime / 60)); // 更新小车位置气泡(InfowWindow)的view控件 如不设置,或者设置为null,则不做绘制 mSyncDisplayManager.updateCarPositionInfoWindowView(info);}@Overridepublic void onSynchronizationProcessResult(int statusCode, String message) { }}
核心方法,将创建好的地图对象、订单管理对象、路线绘制对象传入管理器构造函数中,更多设置可以参考SynchronizationDisplayManager类参考说明:
// 初始化SynchronizationDisplayManagermSyncDisplayManager = new SynchronizationDisplayManager(this, mBaiduMap, mRoleOptions, mDisplayOptions);// 注册结果监听,获取ETA,处理结果状态等信息mSyncDisplayManager.registerSynchronizationDisplayListener(mySyncDisplayListener);// 设置位置刷新频率,单位是秒,默认5s,最小值为1smSyncDisplayManager.setDriverPositionFreshFrequency(3);// 更新绘制参数 如果需要在不同的订单状态下,展示不同的需求,这需要结合订单状态,调用该方法设置。mSyncDisplayManager.updateDisplayOptions(mDisplayOptions);// 更新订单状态信息 司乘同显实际上根据订单状态触发绘制,不同的状态绘制策略不一致,所以此方法是触发绘制的唯一入口。// LBS_ORDER_STATE_UNSPECIFIED = 0 未知订单状态,不做任何处理;// LBS_ORDER_STATE_READY_FOR_SERVICE = 1 司机待服务状态 ,开始拉取数据// LBS_ORDER_STATE_PICK_UP_PASSENGER = 2 司机去上车点接乘客状态// LBS_ORDER_STATE_WAIT_PASSENGER = 3 司机已到上车点,等待乘客上车状态// LBS_ORDER_STATE_DELIVER_PASSENGER = 4 乘客已经上车,司机送乘客去目的地// LBS_ORDER_STATE_ORDER_COMPLETE = 5 订单完成mSyncDisplayManager.updateOrderState(SynchronizationConstants.LBS_ORDER_STATE_READY_FOR_SERVICE);// 使用已经设置的(或默认的)Padding值进行最佳视野立即适配mSyncDisplayManager.adjustVisibleSpanByUser()
在对应Activity的生命周期中管理司乘同显管理器对象的生命周期。
@Overrideprotected void onResume() {super.onResume();// 当APP有前台转到后台时调用该方法,停止数据刷新。对应Activity的onPause意义mSyncDisplayManager.onResume();mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();// 当APP由后台转到前台时,调用该方法,进行数据刷新。对应Activity的onResume意义mSyncDisplayManager.onPause();mMapView.onPause();}/*** 释放资源*/@Overrideprotected void onDestroy() {super.onDestroy();// 注销已经注册的司乘同显监听mSyncDisplayManager.unRegisterSynchronizationDisplayListener(mySyncDisplayListener);// 该方法要早于地图资源释放,即要早于MapView的onDestroy()方法之前否则会出现地图无法释放,或者crash等问题。mSyncDisplayManager.release();mMapView.onDestroy();mMapView = null;}
上一篇
下一篇
本篇文章对您是否有帮助?