diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt
index 01b3a2a77f..6b0bc87b1d 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt
@@ -1,8 +1,6 @@
package com.mogo.eagle.core.function.hmi.ui.msgbox.adapter
import android.app.Activity
-import android.graphics.LinearGradient
-import android.graphics.Shader
import android.os.CountDownTimer
import android.view.LayoutInflater
import android.view.View
@@ -21,6 +19,7 @@ import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat
import com.mogo.eagle.core.widget.AlignTextView
+import com.mogo.eagle.core.widget.AlignTwoTextView
import com.mogo.eagle.core.widget.RoundCanClickConstraintLayout
/**
@@ -130,23 +129,16 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView
is BubbleVoiceHolder -> {
data?.let {
val voiceMsg = it[position].msgBoxBean.bean as VoiceMsg
- holder.tvPassengerVoiceContent.text = voiceMsg.msg
if(voiceMsg.isResp){
//小智说的
- holder.tvPassengerVoiceContent.paint.shader = null
- holder.tvPassengerVoiceContent.setTextColor(activity.resources.getColor(R.color.voice_resp))
+ holder.tvVoiceRes.text = voiceMsg.msg
+ holder.tvVoiceRes.visibility = View.VISIBLE
+ holder.tvPassengerVoiceContent.visibility = View.GONE
}else{
//用户说的
- val mUserGradient = LinearGradient(
- 0f,
- 0f,
- 0f,
- holder.tvPassengerVoiceContent.paint.textSize,
- activity.resources.getColor(R.color.voice_user_start)
- ,activity.resources.getColor(R.color.voice_user_end),
- Shader.TileMode.CLAMP
- )
- holder.tvPassengerVoiceContent.paint.setShader(mUserGradient)
+ holder.tvPassengerVoiceContent.text = voiceMsg.msg
+ holder.tvVoiceRes.visibility = View.GONE
+ holder.tvPassengerVoiceContent.visibility = View.VISIBLE
}
}
}
@@ -211,6 +203,7 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView
//小智语音消息
class BubbleVoiceHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var tvPassengerVoiceContent: AlignTextView = itemView.findViewById(R.id.tvPassengerVoiceContent)
+ var tvVoiceRes: AlignTwoTextView = itemView.findViewById(R.id.tvVoiceRes)
}
}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_voice.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_voice.xml
index 1e01f4181e..99c1aab2e6 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_voice.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_voice.xml
@@ -14,20 +14,39 @@
+
+
\ No newline at end of file
diff --git a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/AlignTextView.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/AlignTextView.java
index 721e05502f..5afc121e42 100644
--- a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/AlignTextView.java
+++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/AlignTextView.java
@@ -1,8 +1,11 @@
package com.mogo.eagle.core.widget;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
+import android.graphics.LinearGradient;
+import android.graphics.Shader;
import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
@@ -90,4 +93,15 @@ public class AlignTextView extends AppCompatTextView {
}
}
+ @SuppressLint("DrawAllocation")
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ if (changed) {
+ getPaint().setShader(new LinearGradient(0, 0, getWidth(), getHeight(),
+ getResources().getColor(R.color.voice_user_start),
+ getResources().getColor(R.color.voice_user_end),
+ Shader.TileMode.CLAMP));
+ }
+ }
}
diff --git a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/AlignTwoTextView.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/AlignTwoTextView.java
new file mode 100644
index 0000000000..245e6ff925
--- /dev/null
+++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/AlignTwoTextView.java
@@ -0,0 +1,95 @@
+package com.mogo.eagle.core.widget;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.LinearGradient;
+import android.graphics.Shader;
+import android.text.Layout;
+import android.text.StaticLayout;
+import android.text.TextPaint;
+import android.util.AttributeSet;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.AppCompatTextView;
+
+public class AlignTwoTextView extends AppCompatTextView {
+ private boolean alignOnlyOneLine;
+
+ public AlignTwoTextView(Context context) {
+ this(context, null);
+ }
+
+ public AlignTwoTextView(Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public AlignTwoTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init(context, attrs);
+ }
+
+ private void init(Context context, AttributeSet attrs) {
+ TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AlignTextView);
+ alignOnlyOneLine = typedArray.getBoolean(R.styleable.AlignTextView_alignOnlyOneLine, false);
+ typedArray.recycle();
+ }
+
+ protected void onDraw(Canvas canvas) {
+
+ TextPaint paint = getPaint();
+ paint.setColor(getCurrentTextColor());
+ paint.drawableState = getDrawableState();
+
+ CharSequence content = getText();
+ if (!(content instanceof String)) {
+ super.onDraw(canvas);
+ return;
+ }
+ String text = (String) content;
+ Layout layout = getLayout();
+
+ for (int i = 0; i < layout.getLineCount(); ++i) {
+ int lineBaseline = layout.getLineBaseline(i) + getPaddingTop();
+ int lineStart = layout.getLineStart(i);
+ int lineEnd = layout.getLineEnd(i);
+ if (alignOnlyOneLine && layout.getLineCount() == 1) {//只有一行
+ String line = text.substring(lineStart, lineEnd);
+ float width = StaticLayout.getDesiredWidth(text, lineStart, lineEnd, paint);
+ this.drawScaledText(canvas, line, lineBaseline, width, paint);
+ } else if (i == layout.getLineCount() - 1) {//最后一行
+ canvas.drawText(text.substring(lineStart), getPaddingLeft(), lineBaseline, paint);
+ break;
+ } else {//中间行
+ String line = text.substring(lineStart, lineEnd);
+ float width = StaticLayout.getDesiredWidth(text, lineStart, lineEnd, paint);
+ this.drawScaledText(canvas, line, lineBaseline, width, paint);
+ }
+ }
+
+ }
+
+ private void drawScaledText(Canvas canvas, String line, float baseLineY, float lineWidth, TextPaint paint) {
+
+ if (line.length() < 1) {
+ return;
+ }
+ float x = getPaddingLeft();
+ boolean forceNextLine = line.charAt(line.length() - 1) == 10;
+ int length = line.length() - 1;
+ if (forceNextLine || length == 0) {
+ canvas.drawText(line, x, baseLineY, paint);
+ return;
+ }
+
+ float d = (getMeasuredWidth() - lineWidth - getPaddingLeft() - getPaddingRight()) / length;
+
+ for (int i = 0; i < line.length(); ++i) {
+ String c = String.valueOf(line.charAt(i));
+ float cw = StaticLayout.getDesiredWidth(c, paint);
+ canvas.drawText(c, x, baseLineY, paint);
+ x += cw + d;
+ }
+ }
+}
diff --git a/core/mogo-core-res/src/main/res/values/color.xml b/core/mogo-core-res/src/main/res/values/color.xml
index b10969f33a..e6a9a12ef4 100644
--- a/core/mogo-core-res/src/main/res/values/color.xml
+++ b/core/mogo-core-res/src/main/res/values/color.xml
@@ -21,5 +21,7 @@
#323C6F
#8E9DD4
+ #FF005EA0
+ #FF1E32D9
\ No newline at end of file