diff --git a/qmuidemo/src/main/java/com/qmuiteam/qmuidemo/fragment/components/qqface/QDQQFaceUsageFragment.java b/qmuidemo/src/main/java/com/qmuiteam/qmuidemo/fragment/components/qqface/QDQQFaceUsageFragment.java index 935d177a..368a75ca 100644 --- a/qmuidemo/src/main/java/com/qmuiteam/qmuidemo/fragment/components/qqface/QDQQFaceUsageFragment.java +++ b/qmuidemo/src/main/java/com/qmuiteam/qmuidemo/fragment/components/qqface/QDQQFaceUsageFragment.java @@ -35,6 +35,7 @@ import com.qmuiteam.qmui.type.parser.EmojiTextParser; import com.qmuiteam.qmui.type.parser.TextParser; import com.qmuiteam.qmui.type.view.LineTypeView; import com.qmuiteam.qmui.type.view.MarqueeTypeView; +import com.qmuiteam.qmui.util.QMUIColorHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmuidemo.QDQQFaceManager; @@ -117,11 +118,12 @@ public class QDQQFaceUsageFragment extends BaseFragment { lineLayout.setMoreUnderlineColor(Color.BLUE); mLineType1.setLineHeight(QMUIDisplayHelper.dp2px(getContext(), 36)); mLineType1.setTextColor(Color.BLACK); - mLineType1.setTextSize(QMUIDisplayHelper.sp2px(getContext(), 15)); + mLineType1.setTextSize(QMUIDisplayHelper.sp2px(getContext(), 33)); mLineType1.setTextParser(textParser); mLineType1.setText("QMUI Android 的设计[微笑]目的是用于辅助快速搭建一个具备基本设计还原[微笑]效果的 Android 项目," + "同时利用自身[微笑]提供的丰富控件及兼容处理,让开[微笑]发者能专注于业务需求而无需耗费[微笑]精力在基础代[微笑]码的设计上。" + "不管是新项目的创建,或是已有项[微笑]目的维护,均可使开[微笑]发效率和项目[微笑]质量得到大幅度提升。"); + mLineType1.addBgEffect(10, 30, QMUIColorHelper.setColorAlpha(Color.RED, 0.5f)); mQQFace1.setText("这是一行很长很长[微笑][微笑][微笑][微笑]的文本,但是[微笑][微笑][微笑][微笑]只能单行显示"); mQQFace2.setText("这是一段很长很长[微笑][微笑][微笑][微笑]的文本,但是最多只能显示三行;" + diff --git a/type/src/main/java/com/qmuiteam/qmui/type/Line.kt b/type/src/main/java/com/qmuiteam/qmui/type/Line.kt index f33a6bc2..ab635311 100644 --- a/type/src/main/java/com/qmuiteam/qmui/type/Line.kt +++ b/type/src/main/java/com/qmuiteam/qmui/type/Line.kt @@ -62,14 +62,14 @@ class Line private constructor() { fun add(element: Element) { mElements.add(element) - contentWidth = (contentWidth + element.measureWidth).toInt() - contentHeight = contentHeight.toFloat().coerceAtLeast(element.measureHeight).toInt() + contentWidth += element.measureWidth + contentHeight = contentHeight.coerceAtLeast(element.measureHeight) } fun addFirst(element: Element) { mElements.add(0, element) - contentWidth = (contentWidth + element.measureWidth).toInt() - contentHeight = contentHeight.toFloat().coerceAtLeast(element.measureHeight).toInt() + contentWidth += element.measureWidth + contentHeight = contentHeight.coerceAtLeast(element.measureHeight) } fun first(): Element? { @@ -185,14 +185,14 @@ class Line private constructor() { hideLastIfSpaceIfNeeded(dropLastIfSpace) layoutWidth = contentWidth val alignment = env.alignment - var start = x.toFloat() - var addSpace = 0f + var start = x + var addSpace = 0 if (alignment === TypeEnvironment.Alignment.RIGHT) { - start = (x + widthLimit - contentWidth).toFloat() + start = x + widthLimit - contentWidth } else if (alignment === TypeEnvironment.Alignment.CENTER) { - start = x + (widthLimit - contentWidth) / 2f + start = x + (widthLimit - contentWidth) / 2 } else if (alignment === TypeEnvironment.Alignment.JUSTIFY) { - val remain = (widthLimit - contentWidth).toFloat() + val remain = widthLimit - contentWidth if (!(isEnd || isMiddleParagraphEndLine) || remain < env.lastLineJustifyMaxWidth) { val gapCount = calculateGapCount() if (gapCount > 0) { @@ -211,7 +211,7 @@ class Line private constructor() { } el.x = x x += el.measureWidth - el.y = y + (contentHeight - el.measureHeight) / 2f + el.y = y + (contentHeight - el.measureHeight) / 2 } } diff --git a/type/src/main/java/com/qmuiteam/qmui/type/element/DrawableElement.kt b/type/src/main/java/com/qmuiteam/qmui/type/element/DrawableElement.kt index cfec7d73..ee1fa8d0 100644 --- a/type/src/main/java/com/qmuiteam/qmui/type/element/DrawableElement.kt +++ b/type/src/main/java/com/qmuiteam/qmui/type/element/DrawableElement.kt @@ -29,13 +29,13 @@ class DrawableElement( } override fun onMeasure(env: TypeEnvironment) { - setMeasureDimen(drawable.intrinsicWidth.toFloat(), drawable.intrinsicHeight.toFloat(), 0f) + setMeasureDimen(drawable.intrinsicWidth, drawable.intrinsicHeight, 0) } override fun onDraw(env: TypeEnvironment, canvas: Canvas) { drawBg(env, canvas) canvas.save() - canvas.translate(x, y) + canvas.translate(x.toFloat(), y.toFloat()) drawable.draw(canvas) canvas.restore() drawBorder(env, canvas) diff --git a/type/src/main/java/com/qmuiteam/qmui/type/element/Element.kt b/type/src/main/java/com/qmuiteam/qmui/type/element/Element.kt index a66dacd0..00dafc79 100644 --- a/type/src/main/java/com/qmuiteam/qmui/type/element/Element.kt +++ b/type/src/main/java/com/qmuiteam/qmui/type/element/Element.kt @@ -57,14 +57,14 @@ abstract class Element(val text: CharSequence, val index: Int, val start: Int) { var visible = VISIBLE - var measureWidth = 0f + var measureWidth = 0 private set - var measureHeight = 0f + var measureHeight = 0 private set - var x = 0f - var y = 0f - var baseLine = 0f - var nextGapWidth = 0f + var x = 0 + var y = 0 + var baseLine = 0 + var nextGapWidth = 0 private var saveTypeList: MutableList? = null private var restoreTypeList: MutableList? = null @@ -92,8 +92,8 @@ abstract class Element(val text: CharSequence, val index: Int, val start: Int) { } } - private val rightWithGap: Float - get() = x + measureWidth + nextGapWidth + 0.5f + private val rightWithGap: Int + get() = x + measureWidth + nextGapWidth init { if(text.length == 1){ @@ -235,7 +235,7 @@ abstract class Element(val text: CharSequence, val index: Int, val start: Int) { } - protected fun setMeasureDimen(measureWidth: Float, measureHeight: Float, baseline: Float) { + protected fun setMeasureDimen(measureWidth: Int, measureHeight: Int, baseline: Int) { this.measureWidth = measureWidth this.measureHeight = measureHeight baseLine = baseline @@ -275,7 +275,7 @@ abstract class Element(val text: CharSequence, val index: Int, val start: Int) { protected abstract fun onDraw(env: TypeEnvironment, canvas: Canvas) protected fun drawBg(env: TypeEnvironment, canvas: Canvas) { if (env.backgroundColor != Color.TRANSPARENT) { - canvas.drawRect(x, y, rightWithGap, y + measureHeight, env.bgPaint) + canvas.drawRect(x.toFloat(), y.toFloat(), rightWithGap.toFloat(), (y + measureHeight).toFloat(), env.bgPaint) } } @@ -283,21 +283,21 @@ abstract class Element(val text: CharSequence, val index: Int, val start: Int) { val paint = env.borderPaint if (env.borderLeftWidth > 0) { paint.color = env.borderLeftColor - canvas.drawRect(x, y, x + env.borderLeftWidth, y + measureHeight, paint) + canvas.drawRect(x.toFloat(), y.toFloat(), (x + env.borderLeftWidth).toFloat(), (y + measureHeight).toFloat(), paint) } if (env.borderTopWidth > 0) { paint.color = env.borderTopColor - canvas.drawRect(x, y, rightWithGap, y + env.borderTopWidth, paint) + canvas.drawRect(x.toFloat(), y.toFloat(), rightWithGap.toFloat(), (y + env.borderTopWidth).toFloat(), paint) } if (env.borderRightWidth > 0) { paint.color = env.borderRightColor - canvas.drawRect(x + measureWidth - env.borderRightWidth, y, - x + measureWidth, y + measureHeight, paint) + canvas.drawRect((x + measureWidth - env.borderRightWidth).toFloat(), y.toFloat(), + (x + measureWidth).toFloat(), (y + measureHeight).toFloat(), paint) } if (env.borderBottomWidth > 0) { paint.color = env.borderBottomColor - canvas.drawRect(x, y + measureHeight - env.borderBottomWidth, - rightWithGap, y + measureHeight, paint) + canvas.drawRect(x.toFloat(), (y + measureHeight - env.borderBottomWidth).toFloat(), + rightWithGap.toFloat(), (y + measureHeight).toFloat(), paint) } } } \ No newline at end of file diff --git a/type/src/main/java/com/qmuiteam/qmui/type/element/EmojiElement.kt b/type/src/main/java/com/qmuiteam/qmui/type/element/EmojiElement.kt index bd4668a1..4e4d77e3 100644 --- a/type/src/main/java/com/qmuiteam/qmui/type/element/EmojiElement.kt +++ b/type/src/main/java/com/qmuiteam/qmui/type/element/EmojiElement.kt @@ -25,13 +25,13 @@ class EmojiElement(val drawable: Drawable, text: CharSequence, index: Int, start val paint = env.paint val size = (paint.fontMetrics.descent - paint.fontMetrics.ascent).toInt() drawable.setBounds(0, 0, size, size) - setMeasureDimen(size.toFloat(), size.toFloat(), 0f) + setMeasureDimen(size, size, 0) } override fun onDraw(env: TypeEnvironment, canvas: Canvas) { drawBg(env, canvas) canvas.save() - canvas.translate(x, y) + canvas.translate(x.toFloat(), y.toFloat()) drawable.draw(canvas) canvas.restore() drawBorder(env, canvas) diff --git a/type/src/main/java/com/qmuiteam/qmui/type/element/IgnoreEffectElement.kt b/type/src/main/java/com/qmuiteam/qmui/type/element/IgnoreEffectElement.kt index ef5b8d96..341bc85f 100644 --- a/type/src/main/java/com/qmuiteam/qmui/type/element/IgnoreEffectElement.kt +++ b/type/src/main/java/com/qmuiteam/qmui/type/element/IgnoreEffectElement.kt @@ -33,7 +33,7 @@ class IgnoreEffectElement(list: List) : Element("", -1, -1) { } override fun onMeasure(env: TypeEnvironment) { - setMeasureDimen(0f, 0f, 0f) + setMeasureDimen(0, 0, 0) } override fun onDraw(env: TypeEnvironment, canvas: Canvas) {} diff --git a/type/src/main/java/com/qmuiteam/qmui/type/element/NextParagraphElement.kt b/type/src/main/java/com/qmuiteam/qmui/type/element/NextParagraphElement.kt index ed302113..acaba752 100644 --- a/type/src/main/java/com/qmuiteam/qmui/type/element/NextParagraphElement.kt +++ b/type/src/main/java/com/qmuiteam/qmui/type/element/NextParagraphElement.kt @@ -21,7 +21,7 @@ import com.qmuiteam.qmui.type.TypeEnvironment class NextParagraphElement(text: CharSequence, index: Int, start: Int) : Element(text, index, start) { override fun onMeasure(env: TypeEnvironment) { - setMeasureDimen(0f, 0f, 0f) + setMeasureDimen(0, 0, 0) } override fun onDraw(env: TypeEnvironment, canvas: Canvas) {} diff --git a/type/src/main/java/com/qmuiteam/qmui/type/element/TextElement.kt b/type/src/main/java/com/qmuiteam/qmui/type/element/TextElement.kt index a4979413..a8eaba91 100644 --- a/type/src/main/java/com/qmuiteam/qmui/type/element/TextElement.kt +++ b/type/src/main/java/com/qmuiteam/qmui/type/element/TextElement.kt @@ -22,14 +22,14 @@ open class TextElement(text: CharSequence, index: Int, start: Int) : Element(tex override fun onMeasure(env: TypeEnvironment) { val paint = env.paint - setMeasureDimen(paint.measureText(text, 0, text.length), - paint.fontMetrics.descent - paint.fontMetrics.ascent, - -paint.fontMetrics.ascent) + setMeasureDimen((paint.measureText(text, 0, text.length) + 0.5f).toInt(), + paint.fontMetricsInt.descent - paint.fontMetricsInt.ascent, + -paint.fontMetricsInt.ascent) } override fun onDraw(env: TypeEnvironment, canvas: Canvas) { drawBg(env, canvas) - canvas.drawText(text, 0, text.length, x, y + baseLine, env.paint) + canvas.drawText(text, 0, text.length, x.toFloat(), (y + baseLine).toFloat(), env.paint) drawBorder(env, canvas) } } \ No newline at end of file diff --git a/type/src/main/java/com/qmuiteam/qmui/type/view/MarqueeTypeView.kt b/type/src/main/java/com/qmuiteam/qmui/type/view/MarqueeTypeView.kt index b78022a6..d17f330c 100644 --- a/type/src/main/java/com/qmuiteam/qmui/type/view/MarqueeTypeView.kt +++ b/type/src/main/java/com/qmuiteam/qmui/type/view/MarqueeTypeView.kt @@ -2,10 +2,8 @@ package com.qmuiteam.qmui.type.view import android.content.Context import android.graphics.* -import android.os.Build import android.os.SystemClock import android.util.AttributeSet -import androidx.annotation.RequiresApi import com.qmuiteam.qmui.type.TypeModel import com.qmuiteam.qmui.type.parser.PlainTextParser import com.qmuiteam.qmui.type.parser.TextParser @@ -22,7 +20,7 @@ class MarqueeTypeView : BaseTypeView { if (field != value) { field = value reset() - contentWidth = -1f + contentWidth = -1 typeModel = value.parse(text) requestLayout() if (isAttachedToWindow) { @@ -36,7 +34,7 @@ class MarqueeTypeView : BaseTypeView { if (field != value) { field = value reset() - contentWidth = -1f + contentWidth = -1 typeModel = textParser.parse(value) requestLayout() if (isAttachedToWindow) { @@ -50,8 +48,8 @@ class MarqueeTypeView : BaseTypeView { var moveSpeedPerMs: Float = resources.displayMetrics.density / 36 var lastDrawTime = -2L - private var elementMaxHeight: Float = 0f - private var contentWidth: Float = -1f + private var elementMaxHeight = 0 + private var contentWidth = -1 private var fadeHelper: FadeHelper? = null private var startX: Float = 0f @@ -87,9 +85,9 @@ class MarqueeTypeView : BaseTypeView { private fun measureAndLayoutModel() { - elementMaxHeight = 0f + elementMaxHeight = 0 var current = typeModel?.firstElement() - var x = 0f + var x = 0 while (current != null) { current.measure(environment) current.x = x