[6.2.0]修改小智语音文字样式

This commit is contained in:
xuxinchao
2023-12-01 10:04:44 +08:00
parent ce7e723368
commit d2e620827e
5 changed files with 141 additions and 18 deletions

View File

@@ -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)
}
}

View File

@@ -14,20 +14,39 @@
<com.mogo.eagle.core.widget.AlignTextView
android:id="@+id/tvPassengerVoiceContent"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_32"
android:textColor="#243959"
android:layout_marginTop="@dimen/dp_54"
android:layout_marginBottom="@dimen/dp_54"
android:layout_marginStart="@dimen/dp_49"
android:layout_marginEnd="@dimen/dp_49"
android:maxWidth="@dimen/dp_502"
android:textStyle="bold"
android:gravity="start"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:visibility="gone"
/>
<com.mogo.eagle.core.widget.AlignTwoTextView
android:id="@+id/tvVoiceRes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_32"
android:layout_marginTop="@dimen/dp_54"
android:textColor="@color/voice_resp"
android:layout_marginBottom="@dimen/dp_54"
android:layout_marginStart="@dimen/dp_49"
android:layout_marginEnd="@dimen/dp_49"
android:maxWidth="@dimen/dp_502"
android:textStyle="bold"
android:gravity="start"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:visibility="gone"
/>
</com.mogo.eagle.core.widget.RoundCanClickConstraintLayout>

View File

@@ -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));
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -21,5 +21,7 @@
<color name="color_323C6F">#323C6F</color>
<color name="color_8E9DD4">#8E9DD4</color>
<color name="voice_user_start">#FF005EA0</color>
<color name="voice_user_end">#FF1E32D9</color>
</resources>