[fea]
[m2]
[距离展示]
This commit is contained in:
yangyakun
2025-06-06 15:15:35 +08:00
parent 3fee256ef2
commit 9943888855
16 changed files with 151 additions and 32 deletions

View File

@@ -1,6 +1,7 @@
package com.mogo.och.common.module.wigets;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
@@ -10,6 +11,8 @@ import android.util.AttributeSet;
import androidx.appcompat.widget.AppCompatTextView;
import com.mogo.och.common.module.R;
/**
* 通用渐变文字
* @author: wangmingjun
@@ -30,6 +33,8 @@ public class OCHGradientTextView extends AppCompatTextView {
private float mdy;
private int mColor;
private int ochgravity = 1;
public OCHGradientTextView(Context context) {
this(context, null);
}
@@ -39,6 +44,11 @@ public class OCHGradientTextView extends AppCompatTextView {
super(context, attrs);
//设置默认的颜色
mColorList = new int[]{0xFFFFFFFF, 0xFFFFFFF};
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.OCHGradientTextView);
ochgravity = array.getInt(R.styleable.OCHGradientTextView_ochgravity, 1);
array.recycle();
}
@@ -60,7 +70,11 @@ public class OCHGradientTextView extends AppCompatTextView {
mPaint.setShadowLayer(mRadius, mdx, mdy, mColor);
//画出文字
canvas.drawText(mTipText, getMeasuredWidth() / 2.0f - mTextBound.width() / 2.0f, getMeasuredHeight() / 2.0f + mTextBound.height() / 2.0f, mPaint);
if(ochgravity==1) {
canvas.drawText(mTipText, getMeasuredWidth() / 2.0f - mTextBound.width() / 2.0f, getMeasuredHeight() / 2.0f + mTextBound.height() / 2.0f, mPaint);
}else if(ochgravity==0){
canvas.drawText(mTipText, 0f, getMeasuredHeight() / 2.0f + mTextBound.height() / 2.0f-mTextBound.bottom, mPaint);
}
}
/**

View File

@@ -14,6 +14,10 @@
<attr name="assetsfolder" format="string" />
</declare-styleable>
<declare-styleable name="OCHGradientTextView">
<attr name="ochgravity" format="integer" />
</declare-styleable>
<declare-styleable name="EmptyView">
<attr name="empty_title" format="string" />
</declare-styleable>

View File

@@ -8,11 +8,14 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.common.module.wigets.WrapContentLinearLayoutManager
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.shuttle.weaknet.passenger.R
import com.mogo.och.shuttle.weaknet.passenger.ui.line.lineinfo.item.StationAdapter
import kotlinx.android.synthetic.main.m2_line_view.view.autoplit_info
import kotlinx.android.synthetic.main.m2_line_view.view.ll_station_container
class LineView : ConstraintLayout, LineViewModel.LineViewCallback {
@@ -46,7 +49,15 @@ class LineView : ConstraintLayout, LineViewModel.LineViewCallback {
// AutoSizeUtils.dp2px(context,20f)
// )
// )
autoplit_info.onClick {
updateRemainMt("12公里","25分钟")
}
ll_station_container.setAdapter(mAdapter)
ll_station_container.itemAnimator?.addDuration = 0;
ll_station_container.itemAnimator?.changeDuration = 0;
ll_station_container.itemAnimator?.moveDuration = 0;
ll_station_container.itemAnimator?.removeDuration = 0;
}
override fun onAttachedToWindow() {
@@ -74,5 +85,11 @@ class LineView : ConstraintLayout, LineViewModel.LineViewCallback {
mAdapter.submitList(stations)
}
override fun updateRemainMt(distance: String, time: String) {
BizLoopManager.runInMainThread{
mAdapter.notifyDistanceAndTime(distance,time)
}
}
}

View File

@@ -4,10 +4,13 @@ import androidx.lifecycle.ViewModel
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.common.module.utils.NumberFormatUtil
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.shuttle.weaknet.passenger.callback.ICommonCallback
import com.mogo.och.shuttle.weaknet.passenger.model.CommonModel
import io.reactivex.disposables.Disposable
import kotlin.math.ceil
import kotlin.math.roundToInt
/**
* @author XuXinChao
@@ -39,8 +42,32 @@ class LineViewModel : ViewModel(), ICommonCallback {
}
}
override fun updateRemainMT(meters: Long, timeInSecond: Long) {
super.updateRemainMT(meters, timeInSecond)
var disUnit = "公里"
var remainDis: String? = "0"
if (meters > 0) {
if (meters / 1000 < 1) {
disUnit = ""
remainDis = meters.toFloat().roundToInt().toString()
} else {
disUnit = "公里"
remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000)
}
}
val time = ceil(timeInSecond / 60f).toInt()
// "$remainDis$disUnit".also { tv_distance.text = it }
// "${time}分钟".also { tv_left_time.text = it }
this.viewCallback?.updateRemainMt("$remainDis$disUnit","${time}分钟")
}
interface LineViewCallback{
fun updateLineStations(stations: MutableList<BusStationBean>?)
fun updateRemainMt(distance: String, time: String)
}
}

View File

@@ -13,6 +13,8 @@ class StationAdapter : ListAdapter<BusStationBean, StationViewHolder>(MessageDif
var showPassOmit = false
var showFuluterOmit = false
var distanceAndTime = ""
override fun submitList(list: MutableList<BusStationBean>?) {
val newDataList = mutableListOf<BusStationBean>()
list?.let {
@@ -80,13 +82,13 @@ class StationAdapter : ListAdapter<BusStationBean, StationViewHolder>(MessageDif
}
}
}
distanceAndTime = ""
super.submitList(newDataList)
}
override fun onBindViewHolder(holder: StationViewHolder, position: Int) {
getItem(position)?.let {
holder.bind(it)
holder.bind(it,distanceAndTime)
}
}
@@ -168,4 +170,9 @@ class StationAdapter : ListAdapter<BusStationBean, StationViewHolder>(MessageDif
super.onViewRecycled(holder)
holder.viewRecycled(holder)
}
fun notifyDistanceAndTime(distance: String, time: String) {
distanceAndTime = "${distance}·${time}"
notifyItemChanged(currentIndex)
}
}

View File

@@ -12,7 +12,7 @@ import java.util.Locale
abstract class StationViewHolder(view: View) : RecyclerView.ViewHolder(view) {
abstract fun bind(item: BusStationBean)
abstract fun bind(item: BusStationBean,distanceAndView:String)
open fun viewRecycled(holder: StationViewHolder){}
private val sampleDateFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
protected val TAG = javaClass.simpleName
@@ -34,45 +34,51 @@ abstract class StationViewHolder(view: View) : RecyclerView.ViewHolder(view) {
class NormalStationStartViewHolder(binding: View) : StationViewHolder(binding) {
private var startStaionName: AppCompatTextView = binding.findViewById(R.id.actv_normal_station_start)
override fun bind(item: BusStationBean) {
override fun bind(item: BusStationBean,distanceAndView:String) {
startStaionName.text = item.name
}
}
class NormalStationEndViewHolder(binding: View) : StationViewHolder(binding) {
private var endStaionName: AppCompatTextView = binding.findViewById(R.id.actv_normal_station_end)
override fun bind(item: BusStationBean) {
override fun bind(item: BusStationBean,distanceAndView:String) {
endStaionName.text = item.name
}
}
class NormalStationPassViewHolder(binding: View) : StationViewHolder(binding) {
private var passStaionName: AppCompatTextView = binding.findViewById(R.id.actv_normal_station_pass)
override fun bind(item: BusStationBean) {
override fun bind(item: BusStationBean,distanceAndView:String) {
passStaionName.text = item.name
}
}
class NormalStationFutureViewHolder(binding: View) : StationViewHolder(binding) {
private var futureStaionName: AppCompatTextView = binding.findViewById(R.id.actv_normal_station_future)
override fun bind(item: BusStationBean) {
override fun bind(item: BusStationBean,distanceAndView:String) {
futureStaionName.text = item.name
}
}
class CurrentStationViewHolder(val binding: View) : StationViewHolder(binding) {
class CurrentStationViewHolder(binding: View) : StationViewHolder(binding) {
private var currentStaionName: OCHGradientTextView = binding.findViewById(R.id.och_current_station_name)
override fun bind(item: BusStationBean) {
currentStaionName.text = item.name
private var actv_distance: AppCompatTextView = binding.findViewById(R.id.actv_distance)
override fun bind(item: BusStationBean,distanceAndView:String) {
var text = item.name
if(text.length>12){
text = text.slice(0..10)+""
}
currentStaionName.text = text
currentStaionName.setVertrial(true)
val intArrayOf = intArrayOf(
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_43cefe),
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_1466fb),
)
currentStaionName.setmColorList(intArrayOf)
actv_distance.text = distanceAndView
}
}
class CurrentStationStartViewHolder(binding: View) : StationViewHolder(binding) {
private var currentStaionStartName: OCHGradientTextView = binding.findViewById(R.id.och_current_station_start_name)
override fun bind(item: BusStationBean) {
override fun bind(item: BusStationBean,distanceAndView:String) {
currentStaionStartName.text = item.name
val intArrayOf = intArrayOf(
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_43cefe),
@@ -83,19 +89,25 @@ class CurrentStationStartViewHolder(binding: View) : StationViewHolder(binding)
}
class CurrentStationEndViewHolder(binding: View) : StationViewHolder(binding) {
private var currentStaionEndName: OCHGradientTextView = binding.findViewById(R.id.och_current_station_end_name)
override fun bind(item: BusStationBean) {
currentStaionEndName.text = item.name
private var actv_distance_end: AppCompatTextView = binding.findViewById(R.id.actv_distance_end)
override fun bind(item: BusStationBean,distanceAndView:String) {
var text = item.name
if(text.length>12){
text = text.slice(0..10)+""
}
currentStaionEndName.text = text
val intArrayOf = intArrayOf(
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_43cefe),
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_1466fb),
)
currentStaionEndName.setmColorList(intArrayOf)
actv_distance_end.text = distanceAndView
}
}
class OmitPassViewHolder(val binding: View) : StationViewHolder(binding) {
class OmitPassViewHolder(binding: View) : StationViewHolder(binding) {
private var omitCout: AppCompatTextView = binding.findViewById(R.id.actv_pass_omit_cout)
override fun bind(item: BusStationBean) {
override fun bind(item: BusStationBean,distanceAndView:String) {
if(item is StationBeanOmit){
omitCout.text = "${item.coutOmit}"
}
@@ -103,7 +115,7 @@ class OmitPassViewHolder(val binding: View) : StationViewHolder(binding) {
}
class OmitFutureViewHolder(binding: View) : StationViewHolder(binding) {
private var omitCout: AppCompatTextView = binding.findViewById(R.id.actv_future_omit_count)
override fun bind(item: BusStationBean) {
override fun bind(item: BusStationBean,distanceAndView:String) {
if(item is StationBeanOmit){
omitCout.text = "${item.coutOmit}"
}

View File

@@ -12,11 +12,14 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_width="@dimen/dp_762"
app:layout_constraintEnd_toStartOf="@+id/autoplit_info"
android:layout_marginEnd="@dimen/dp_41"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<com.mogo.och.shuttle.weaknet.passenger.ui.line.autopilot.AutopilotView
android:id="@+id/autoplit_info"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="@dimen/dp_19"

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_764"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_68"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
@@ -42,14 +42,32 @@
<com.mogo.och.common.module.wigets.OCHGradientTextView
android:id="@+id/och_current_station_end_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/dp_118"
android:text="惠新西街北口"
android:layout_marginBottom="@dimen/dp_8"
android:textColor="@color/m2_516582"
app:ochgravity="0"
app:layout_constraintHorizontal_chainStyle="packed"
android:ellipsize="end"
android:maxLines="1"
android:textStyle="bold"
android:textSize="@dimen/dp_42"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toTopOf="@+id/och_current_station_end_name"
app:layout_constraintBottom_toBottomOf="@+id/och_current_station_end_name"
app:layout_constraintStart_toEndOf="@+id/och_current_station_end_name"
android:layout_marginStart="@dimen/dp_20"
android:textStyle="bold"
android:textColor="@color/common_203555"
android:textSize="@dimen/dp_24"
android:text="7.5公里·23分钟"
android:id="@+id/actv_distance_end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_764"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_68"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
@@ -37,7 +37,6 @@
android:layout_height="@dimen/dp_60"/>
<com.mogo.och.common.module.wigets.OCHGradientTextView
android:id="@+id/och_current_station_start_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -54,4 +53,6 @@
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_764"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_68"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
@@ -49,14 +49,30 @@
<com.mogo.och.common.module.wigets.OCHGradientTextView
android:id="@+id/och_current_station_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/dp_118"
android:text="惠新西街北口"
android:text="惠新西街北口惠新"
android:textColor="@color/m2_516582"
android:layout_marginBottom="@dimen/dp_8"
android:ellipsize="end"
android:maxLines="1"
app:ochgravity="0"
android:textStyle="bold"
android:textSize="@dimen/dp_42"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toTopOf="@+id/och_current_station_name"
app:layout_constraintBottom_toBottomOf="@+id/och_current_station_name"
app:layout_constraintStart_toEndOf="@+id/och_current_station_name"
android:layout_marginStart="@dimen/dp_10"
android:textStyle="bold"
android:textColor="@color/common_203555"
android:textSize="@dimen/dp_24"
android:text="7.5公里·23分钟"
android:id="@+id/actv_distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_68">
<View

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_68">
<View

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_68">
<View

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_68">
<View

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_68">

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_68">