[速度里程抽取view]
This commit is contained in:
yangyakun
2023-08-14 16:55:37 +08:00
parent 7c28b11c8f
commit eec510caa9
6 changed files with 409 additions and 258 deletions

View File

@@ -7,7 +7,6 @@ import android.view.View
import androidx.lifecycle.LifecycleOwner
import com.amap.api.maps.model.LatLng
import com.mogo.commons.voice.AIAssist
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
@@ -23,8 +22,6 @@ import com.mogo.och.bus.passenger.bean.response.LineInfoResponse
import com.mogo.och.bus.passenger.bean.response.OrderInfoResponse
import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse
import com.mogo.och.bus.passenger.bean.response.TrajectoriesResponse
import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback
import com.mogo.och.bus.passenger.callback.IDistanceCallback
import com.mogo.och.bus.passenger.callback.IOrderChangeCallback
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.model.IOrderStatusChangeListener
@@ -38,17 +35,14 @@ import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.StopSideStatusManager
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.NumberFormatUtil
import com.mogo.och.common.module.voice.VoiceNotice
import me.jessyan.autosize.utils.AutoSizeUtils
import java.util.concurrent.ConcurrentHashMap
import kotlin.math.ceil
class BusPassengerPresenter(view: MainFragment?) :
BusBasePassengerFunctionDevicePresenter<MainFragment?>(view),
IDistanceCallback, IOrderChangeCallback, IOrderStatusChangeListener,
StopSideStatusManager.OCHPlanningActionsCallback, LightAirconditionDoorCallback, IBusPassengerControllerStatusCallback {
IOrderChangeCallback, IOrderStatusChangeListener,
StopSideStatusManager.OCHPlanningActionsCallback, LightAirconditionDoorCallback {
private val lindIdAndView = ConcurrentHashMap<Long, MakerWithSiteNamewithCheck?>()
@@ -57,12 +51,11 @@ class BusPassengerPresenter(view: MainFragment?) :
const val KEY4SHOWNOVICEGUIDANCE = "showNoviceGuidanceOrderNor"
}
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
CharterPassengerModel.init()
// 定位监听
CharterPassengerModel.setStationDistanceListener(TAG, this)
CharterPassengerModel.setControllerStatusCallback(TAG,this)
CharterPassengerModel.setCarTypeChangeListener(this)
CharterPassengerModel.setStatusChangeListener(TAG, this)
CallerTelematicListenerManager.addListener(TAG, DriverMessage)
@@ -73,71 +66,25 @@ class BusPassengerPresenter(view: MainFragment?) :
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
CharterPassengerModel.setStationDistanceListener(TAG, null)
CharterPassengerModel.setCarTypeChangeListener(null)
CallerTelematicListenerManager.removeListener(TAG)
StopSideStatusManager.removeListener(TAG)
}
override fun onCarLocationChanged(location: MogoLocation?) {
location?.let {
setSpeed(it.gnssSpeed)
}
}
private fun setSpeed(speed: Float) {
UiThreadHandler.post {
val speedKM = (Math.abs(speed) * 3.6f).toInt()
mView?.setSpeed(speedKM.toString())
}
}
private fun setDistanceAndTime(
distance: String,
distanceUnit: String,
leftTime: String,
arriveTime: String
) {
UiThreadHandler.post {
mView?.setDistanceAndTime(distance, distanceUnit, leftTime, arriveTime)
}
}
/**
* 计算剩余距离和剩余时间
*/
override fun setDistancecAndTime(meters: Long, timeInSecond: Long) {
if (meters < 0 && timeInSecond < 0) {
setDistanceAndTime("--", context.getString(R.string.m1_distance_unit_km), "--", "--")
return
}
var dis: String? = "0"
var disUnit = "KM"
if (meters > 0) {
if (meters / 1000 < 1) {
disUnit = context.getString(R.string.m1_distance_unit_m)
dis = Math.round(meters.toFloat()).toString()
} else {
disUnit = context.getString(R.string.m1_distance_unit_km)
dis = NumberFormatUtil.formatLong(meters.toDouble() / 1000)
}
}
val time = ceil(timeInSecond / 60f).toInt()
val arriveTime = DateTimeUtil.getAfterSecondTime(timeInSecond.toInt())
setDistanceAndTime(dis.toString(), disUnit, time.toString(), arriveTime)
}
override fun setCarChangeListener(productType: Int?) {
when (productType) {
OrderInfoResponse.M1_LOVE -> {
mView?.setCarModle(R.raw.aiqinghao)
}
OrderInfoResponse.M1_FAMILY -> {
mView?.setCarModle(R.raw.jiatinghao)
}
OrderInfoResponse.M1_FRIENDLY -> {
mView?.setCarModle(R.raw.pengyouhao)
}
else -> {
mView?.setCarModle(R.raw.m1)
}
@@ -157,33 +104,36 @@ class BusPassengerPresenter(view: MainFragment?) :
clearShowNoviceGuidanceSharedPrefs()
}
}
OrderStatusEnum.OrderNoLine -> {
CallerOrderListenerManager.invokeOrderRemoval();
showNoviceGuidance()
}
OrderStatusEnum.OrdersWithLine -> {}
OrderStatusEnum.NoOrderUse -> {
when (CallerAutoPilotStatusListenerManager.getState()) {
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> {// 不可自动驾驶
ToastCharterUtils.showShort("设备未就绪请稍等,请安全员主动停止车辆")
}
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> {//
ToastCharterUtils.showShort("因车辆正在人工驾驶中无法靠边停车,请安全员主动停止车辆")
}
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> {
// 靠边停车 订单结束 靠边停车
CallerAutoPilotControlManager.sendPlanningCmd(1)
}
IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> {
ToastCharterUtils.showShort("因车辆正在平行驾驶中无法靠边停车,请安全员主动停止车辆")
}
else -> {}
}
UiThreadHandler.post {
UiThreadHandler.post {
mView?.showOpenAndCloseDoor()
setDistancecAndTime(-1, -1)
}
mView?.showOpenAndCloseDoor()
}
}
}
@@ -196,21 +146,21 @@ class BusPassengerPresenter(view: MainFragment?) :
private fun showNoviceGuidance() {
CallerLogger.d(M_BUS_P + TAG, "showNoviceGuidance")
val currentOrderInfo = CharterPassengerModel.getCurrentOrderInfo()
currentOrderInfo?.orderNo?.let {order->
currentOrderInfo?.orderNo?.let { order ->
val stringSet = SharedPrefs.getInstance(context).getStringSet(KEY4SHOWNOVICEGUIDANCE)
if(stringSet==null){
if (stringSet == null) {
}else{
} else {
if (stringSet.contains(order)) {
return
}else{
} else {
}
}
UiThreadHandler.post({
mView?.showNoviceGuidanceFragment()
},UiThreadHandler.MODE.QUEUE)
}, UiThreadHandler.MODE.QUEUE)
}
}
@@ -236,15 +186,18 @@ class BusPassengerPresenter(view: MainFragment?) :
StopSideStatusManager.Status.NOSTART -> {
ToastCharterUtils.showShort(errorInfo)
}
StopSideStatusManager.Status.START -> {
VoiceNotice.showNotice(
context.getString(R.string.m1_stop_site_zh),
AIAssist.LEVEL0
)
}
StopSideStatusManager.Status.DOING -> {
// 正在靠边停车
}
StopSideStatusManager.Status.EndingSuccess -> {
ToastCharterUtils.showShort("靠边停车成功")
VoiceNotice.showNotice(
@@ -252,6 +205,7 @@ class BusPassengerPresenter(view: MainFragment?) :
AIAssist.LEVEL0
)
}
StopSideStatusManager.Status.EndingFaile -> {
ToastCharterUtils.showShort("车辆系统繁忙,请稍后再试")
}
@@ -273,65 +227,90 @@ class BusPassengerPresenter(view: MainFragment?) :
lineInfo: LineInfoResponse.LineInfo,
sites: List<SiteInfoResponse.SiteInfo>
) {
CharterPassengerModel.getLineTrajectory(lineInfo.lineId!!,object : OchCommonServiceCallback<TrajectoriesResponse> {
override fun onSuccess(data: TrajectoriesResponse?) {
if (null != data && 0 == data.code) {
data.data?.let {
CallerLogger.d(M_BUS_P + TAG, "getLineTrajectory轨迹点${data.data.size}")
val trajectoryList = mutableListOf<LatLng>()
it.forEach {latLngMain ->
trajectoryList.add(latLngMain.exchangeData())
CharterPassengerModel.getLineTrajectory(lineInfo.lineId!!,
object : OchCommonServiceCallback<TrajectoriesResponse> {
override fun onSuccess(data: TrajectoriesResponse?) {
if (null != data && 0 == data.code) {
data.data?.let {
CallerLogger.d(
M_BUS_P + TAG,
"getLineTrajectory轨迹点${data.data.size}"
)
val trajectoryList = mutableListOf<LatLng>()
it.forEach { latLngMain ->
trajectoryList.add(latLngMain.exchangeData())
}
drawStationInfo(sites)
mView?.drawOverMapViewTrajectory(trajectoryList)
}
drawStationInfo(sites)
mView?.drawOverMapViewTrajectory(trajectoryList)
}
}
}
override fun onFail(code: Int, msg: String) {
ToastCharterUtils.showShort("$code:$msg")
}
})
override fun onFail(code: Int, msg: String) {
ToastCharterUtils.showShort("$code:$msg")
}
})
}
fun drawStationInfo(sites: List<SiteInfoResponse.SiteInfo>){
fun drawStationInfo(sites: List<SiteInfoResponse.SiteInfo>) {
val stationsList: MutableList<SiteMarkerBean> = mutableListOf()
val stationsNameList: MutableList<SiteMarkerBean> = mutableListOf()
val stationIcon = BitmapFactory.decodeResource(context.resources, R.drawable.map_staton_icon)
val stationIcon =
BitmapFactory.decodeResource(context.resources, R.drawable.map_staton_icon)
sites.forEach {
stationsList.add(SiteMarkerBean(LatLng(it.GcjLat!!,it.GcjLon!!),stationIcon,0.5f,1f))
val bitmap = getBitmap(it.siteId!!,it.siteName ?: "", it.isCheck)
stationsNameList.add(SiteMarkerBean(LatLng(it.GcjLat,it.GcjLon),bitmap,0.0f,0.2f))
stationsList.add(
SiteMarkerBean(
LatLng(it.GcjLat!!, it.GcjLon!!),
stationIcon,
0.5f,
1f
)
)
val bitmap = getBitmap(it.siteId!!, it.siteName ?: "", it.isCheck)
stationsNameList.add(SiteMarkerBean(LatLng(it.GcjLat, it.GcjLon), bitmap, 0.0f, 0.2f))
}
mView?.drawOverMapViewStation(stationsList,stationsNameList)
mView?.drawOverMapViewStation(stationsList, stationsNameList)
}
private fun getBitmap(siteId:Long,siteName: String,isCheck:Boolean): Bitmap {
private fun getBitmap(siteId: Long, siteName: String, isCheck: Boolean): Bitmap {
var siteView = lindIdAndView[siteId]
if(siteView==null){
if (siteView == null) {
val marker = MakerWithSiteName(context)
marker.setTextAndCheck(siteName,isCheck)
marker.setTextAndCheck(siteName, isCheck)
marker.measure(
View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 145f), View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 34f), View.MeasureSpec.EXACTLY)
View.MeasureSpec.makeMeasureSpec(
AutoSizeUtils.dp2px(context, 145f),
View.MeasureSpec.UNSPECIFIED
),
View.MeasureSpec.makeMeasureSpec(
AutoSizeUtils.dp2px(context, 34f),
View.MeasureSpec.EXACTLY
)
)
marker.layout(0, 0, marker.measuredWidth, marker.measuredHeight)
val bitmap = Bitmap.createBitmap(marker.width, marker.height, Bitmap.Config.ARGB_8888)
marker.draw(Canvas(bitmap))
siteView = MakerWithSiteNamewithCheck(isCheck,marker,bitmap)
siteView = MakerWithSiteNamewithCheck(isCheck, marker, bitmap)
lindIdAndView[siteId] = siteView
}else{
} else {
CallerLogger.d(M_BUS_P + TAG, "缓存View:$siteName---${siteView.isCheck}-----$isCheck")
if (siteView.isCheck != isCheck) {
val marker = siteView.makerWithSiteName
marker.setTextAndCheck(siteName,isCheck)
marker.setTextAndCheck(siteName, isCheck)
marker.measure(
View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 145f), View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 34f), View.MeasureSpec.UNSPECIFIED)
View.MeasureSpec.makeMeasureSpec(
AutoSizeUtils.dp2px(context, 145f),
View.MeasureSpec.UNSPECIFIED
),
View.MeasureSpec.makeMeasureSpec(
AutoSizeUtils.dp2px(context, 34f),
View.MeasureSpec.UNSPECIFIED
)
)
marker.layout(0, 0, marker.measuredWidth, marker.measuredHeight)
val bitmap = Bitmap.createBitmap(marker.width, marker.height, Bitmap.Config.ARGB_8888)
val bitmap =
Bitmap.createBitmap(marker.width, marker.height, Bitmap.Config.ARGB_8888)
marker.draw(Canvas(bitmap))
siteView.isCheck = isCheck
siteView.bitmapView = bitmap
@@ -351,7 +330,10 @@ class BusPassengerPresenter(view: MainFragment?) :
it.wgs84Lat!!
)
val latLng = LatLng(coordinateConverterWgsToGcj.latitude, coordinateConverterWgsToGcj.longitude)
val latLng = LatLng(
coordinateConverterWgsToGcj.latitude,
coordinateConverterWgsToGcj.longitude
)
mView?.drawEndStation(latLng)
}
}

View File

@@ -32,8 +32,6 @@ import com.mogo.och.bus.passenger.ui.dialogfragment.M1CarUserNoOrderFragment
import com.mogo.och.bus.passenger.ui.dialogfragment.M1ContainFragment
import com.mogo.och.bus.passenger.ui.dialogfragment.NoviceGuidanceFragment
import com.mogo.och.bus.passenger.ui.statusbar.StatusBarView
import com.mogo.och.common.module.biz.constant.LoginStatusManager
import kotlinx.android.synthetic.main.m1_contain_fragment.bb_bottom_bar
import kotlinx.android.synthetic.main.m1_main_fragment.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
@@ -199,23 +197,6 @@ class MainFragment :
DebugViewWatchDogFragment.showDebugView(childFragmentManager,parentFragmentManager,debugViewFragment)
}
fun setSpeed(speed: String) {
tv_speed.text = speed
}
fun setDistanceAndTime(
distance: String,
distanceUnit: String,
leftTime:String,
arriveTime:String
) {
tv_distance.text = distance
tv_distance_unit.text = distanceUnit
tv_distance_surplus_time.text = leftTime
tv_distance_arrive_time.text = arriveTime
}
fun setCarModle(rawInfo: Int){
getMapUIController()?.changeCurrentIcon(rawInfo)
HdMapBuildConfig.currentCarVrIconRes = rawInfo

View File

@@ -0,0 +1,69 @@
package com.mogo.och.bus.passenger.ui.itinerary
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import com.mogo.och.bus.passenger.R
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_arrive_time
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_surplus_time
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_unit
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_speed
class ItineraryView : ConstraintLayout, ItineraryViewModel.ItineraryViewCallback {
private val TAG = "ItineraryView"
constructor(context: Context) : super(context)
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr)
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
private fun initView() {
LayoutInflater.from(context).inflate(R.layout.m1_itinerary_info, this, true)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
val viewModel = findViewTreeViewModelStoreOwner()?.let {
ViewModelProvider(it).get(ItineraryViewModel::class.java)
}
viewModel?.setDistanceCallback(this)
}
override fun setSpeed(speed: String) {
tv_speed.text = speed
}
override fun setDistanceAndTime(
distance: String,
distanceUnit: String,
leftTime:String,
arriveTime:String
) {
tv_distance.text = distance
tv_distance_unit.text = distanceUnit
tv_distance_surplus_time.text = leftTime
tv_distance_arrive_time.text = arriveTime
}
init {
try {
initView()
} catch (e: Exception) {
e.printStackTrace()
}
}
}

View File

@@ -0,0 +1,107 @@
package com.mogo.och.bus.passenger.ui.itinerary
import androidx.lifecycle.ViewModel
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.callback.IDistanceCallback
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.model.IOrderStatusChangeListener
import com.mogo.och.bus.passenger.model.OrderStatusEnum
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.NumberFormatUtil
import kotlin.math.abs
import kotlin.math.ceil
class ItineraryViewModel : ViewModel(), IMoGoChassisLocationGCJ02Listener, IDistanceCallback,
IOrderStatusChangeListener {
private val TAG = ItineraryViewModel::class.java.simpleName
private var viewCallback: ItineraryViewCallback? = null
init {
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 4, this)
CharterPassengerModel.setStationDistanceListener(TAG, this)
CharterPassengerModel.setStatusChangeListener(TAG, this)
}
override fun onCleared() {
super.onCleared()
this.viewCallback = null
CallerChassisLocationGCJ02ListenerManager.removeListener(TAG)
CharterPassengerModel.setStationDistanceListener(TAG, null)
CharterPassengerModel.setStatusChangeListener(TAG, null)
}
fun setDistanceCallback(viewCallback: ItineraryViewCallback) {
this.viewCallback = viewCallback
}
override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
mogoLocation?.let {
UiThreadHandler.post {
val speedKM = (abs(it.gnssSpeed) * 3.6f).toInt()
viewCallback?.setSpeed(speedKM.toString())
}
}
}
override fun setDistancecAndTime(meters: Long, timeInSecond: Long) {
val unitKm = AbsMogoApplication.getApp().getString(R.string.m1_distance_unit_km)
if (meters < 0 && timeInSecond < 0) {
setDistanceAndTime("--", unitKm, "--", "--")
return
}
var dis: String? = "0"
var disUnit = "KM"
if (meters > 0) {
if (meters / 1000 < 1) {
disUnit = AbsMogoApplication.getApp().getString(R.string.m1_distance_unit_m)
dis = Math.round(meters.toFloat()).toString()
} else {
disUnit = unitKm
dis = NumberFormatUtil.formatLong(meters.toDouble() / 1000)
}
}
val time = ceil(timeInSecond / 60f).toInt()
val arriveTime = DateTimeUtil.getAfterSecondTime(timeInSecond.toInt())
setDistanceAndTime(dis.toString(), disUnit, time.toString(), arriveTime)
}
private fun setDistanceAndTime(
distance: String,
distanceUnit: String,
leftTime: String,
arriveTime: String
) {
UiThreadHandler.post {
viewCallback?.setDistanceAndTime(distance, distanceUnit, leftTime, arriveTime)
}
}
override fun onStatusChange(currentStatus: OrderStatusEnum) {
when (currentStatus) {
OrderStatusEnum.NoOrderUse -> {
UiThreadHandler.post {
setDistancecAndTime(-1, -1)
}
}
else ->{}
}
}
interface ItineraryViewCallback {
fun setSpeed(speed: String)
fun setDistanceAndTime(
distance: String,
distanceUnit: String,
leftTime: String,
arriveTime: String
)
}
}

View File

@@ -0,0 +1,146 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- 速度 -->
<LinearLayout
android:id="@+id/ll_car_speed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_74"
android:layout_marginStart="@dimen/dp_29"
android:layout_width="@dimen/dp_152"
android:background="@drawable/bus_p_car_speed"
android:orientation="vertical"
android:layout_height="@dimen/dp_152">
<TextView
android:id="@+id/tv_speed"
android:text="0"
android:textSize="@dimen/dp_60"
android:gravity="center"
android:layout_marginTop="@dimen/dp_12"
android:textColor="@color/bus_p_m1_f5fbff"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:textSize="@dimen/dp_19"
android:text="@string/bus_p_m1_speed_unit"
android:layout_marginTop="-10dp"
android:layout_gravity="center_horizontal"
android:textColor="@android:color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<!-- 距离、剩余时间、到达时间 -->
<androidx.constraintlayout.widget.ConstraintLayout
app:layout_constraintTop_toBottomOf="@+id/ll_car_speed"
app:layout_constraintStart_toStartOf="@+id/ll_car_speed"
app:layout_constraintEnd_toEndOf="@+id/ll_car_speed"
android:background="@drawable/bus_p_distance_info_bg"
android:layout_width="@dimen/dp_115"
android:layout_height="@dimen/dp_346">
<TextView
android:id="@+id/tv_distance"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/tv_distance_unit"
app:layout_constraintVertical_chainStyle="packed"
android:fontFamily="@font/din"
android:text="--"
android:textSize="@dimen/dp_37"
android:textColor="@color/bus_p_m1_203555"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_distance_unit"
app:layout_constraintTop_toBottomOf="@+id/tv_distance"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/v_line_01"
android:text="@string/m1_distance_unit_km"
android:textSize="@dimen/dp_17"
android:textColor="@color/bus_p_m1_112b57"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<View
android:id="@+id/v_line_01"
android:background="@android:color/transparent"
app:layout_constraintVertical_bias="0.33"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"/>
<TextView
android:id="@+id/tv_distance_surplus_time"
app:layout_constraintTop_toBottomOf="@+id/v_line_01"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintBottom_toTopOf="@+id/tv_distance_surplus_time_unit"
app:layout_constraintHorizontal_chainStyle="packed"
android:text="--"
android:fontFamily="@font/din"
android:textSize="@dimen/dp_37"
android:textColor="@color/bus_p_m1_203555"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_distance_surplus_time_unit"
app:layout_constraintTop_toBottomOf="@+id/tv_distance_surplus_time"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/v_line_02"
android:text="@string/m1_arrive_left_time"
android:textSize="@dimen/dp_17"
android:textColor="@color/bus_p_m1_112b57"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<View
android:id="@+id/v_line_02"
android:background="@android:color/transparent"
app:layout_constraintVertical_bias="0.66"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"/>
<TextView
android:id="@+id/tv_distance_arrive_time"
app:layout_constraintTop_toTopOf="@+id/v_line_02"
app:layout_constraintBottom_toTopOf="@+id/tv_distance_arrive_time_unit"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_chainStyle="packed"
android:text="--"
android:fontFamily="@font/din"
android:textSize="@dimen/dp_37"
android:textColor="@color/bus_p_m1_203555"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_distance_arrive_time_unit"
app:layout_constraintTop_toBottomOf="@+id/tv_distance_arrive_time"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:text="@string/m1_reach_time"
android:textSize="@dimen/dp_17"
android:textColor="@color/bus_p_m1_112b57"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -57,145 +57,11 @@
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
app:layout_constraintStart_toStartOf="parent" />
<!-- 速度 -->
<LinearLayout
android:id="@+id/ll_car_speed"
app:layout_constraintStart_toStartOf="parent"
<com.mogo.och.bus.passenger.ui.itinerary.ItineraryView
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_74"
android:layout_marginStart="@dimen/dp_29"
android:layout_width="@dimen/dp_152"
android:background="@drawable/bus_p_car_speed"
android:orientation="vertical"
android:layout_height="@dimen/dp_152">
<TextView
android:id="@+id/tv_speed"
android:text="0"
android:textSize="@dimen/dp_60"
android:gravity="center"
android:layout_marginTop="@dimen/dp_12"
android:textColor="@color/bus_p_m1_f5fbff"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:textSize="@dimen/dp_19"
android:text="@string/bus_p_m1_speed_unit"
android:layout_marginTop="-10dp"
android:layout_gravity="center_horizontal"
android:textColor="@android:color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<!-- 距离、剩余时间、到达时间 -->
<androidx.constraintlayout.widget.ConstraintLayout
app:layout_constraintTop_toBottomOf="@+id/ll_car_speed"
app:layout_constraintStart_toStartOf="@+id/ll_car_speed"
app:layout_constraintEnd_toEndOf="@+id/ll_car_speed"
android:background="@drawable/bus_p_distance_info_bg"
android:layout_width="@dimen/dp_115"
android:layout_height="@dimen/dp_346">
<TextView
android:id="@+id/tv_distance"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/tv_distance_unit"
app:layout_constraintVertical_chainStyle="packed"
android:fontFamily="@font/din"
android:text="--"
android:textSize="@dimen/dp_37"
android:textColor="@color/bus_p_m1_203555"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_distance_unit"
app:layout_constraintTop_toBottomOf="@+id/tv_distance"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/v_line_01"
android:text="@string/m1_distance_unit_km"
android:textSize="@dimen/dp_17"
android:textColor="@color/bus_p_m1_112b57"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<View
android:id="@+id/v_line_01"
android:background="@android:color/transparent"
app:layout_constraintVertical_bias="0.33"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"/>
<TextView
android:id="@+id/tv_distance_surplus_time"
app:layout_constraintTop_toBottomOf="@+id/v_line_01"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintBottom_toTopOf="@+id/tv_distance_surplus_time_unit"
app:layout_constraintHorizontal_chainStyle="packed"
android:text="--"
android:fontFamily="@font/din"
android:textSize="@dimen/dp_37"
android:textColor="@color/bus_p_m1_203555"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_distance_surplus_time_unit"
app:layout_constraintTop_toBottomOf="@+id/tv_distance_surplus_time"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/v_line_02"
android:text="@string/m1_arrive_left_time"
android:textSize="@dimen/dp_17"
android:textColor="@color/bus_p_m1_112b57"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<View
android:id="@+id/v_line_02"
android:background="@android:color/transparent"
app:layout_constraintVertical_bias="0.66"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"/>
<TextView
android:id="@+id/tv_distance_arrive_time"
app:layout_constraintTop_toTopOf="@+id/v_line_02"
app:layout_constraintBottom_toTopOf="@+id/tv_distance_arrive_time_unit"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_chainStyle="packed"
android:text="--"
android:fontFamily="@font/din"
android:textSize="@dimen/dp_37"
android:textColor="@color/bus_p_m1_203555"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_distance_arrive_time_unit"
app:layout_constraintTop_toBottomOf="@+id/tv_distance_arrive_time"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:text="@string/m1_reach_time"
android:textSize="@dimen/dp_17"
android:textColor="@color/bus_p_m1_112b57"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>
app:layout_constraintStart_toStartOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.mogo.och.bus.passenger.ui.orderinfo.OrderInfoView
android:id="@+id/biz_orderinfo"