From 48bfabcbeabf109cb4ea84abe754805056618618 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 9 Mar 2020 09:36:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/widget/BatteryView.kt | 61 ++++++++----------- app/src/main/res/layout/view_book_page.xml | 3 +- 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt b/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt index 60e781c93..1cae8e09d 100644 --- a/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt @@ -1,67 +1,54 @@ package io.legado.app.ui.widget +import android.annotation.SuppressLint import android.content.Context import android.graphics.Canvas import android.graphics.Paint import android.graphics.Rect -import android.graphics.Typeface -import android.text.StaticLayout -import android.text.TextPaint import android.util.AttributeSet -import android.view.View import androidx.annotation.ColorInt +import androidx.appcompat.widget.AppCompatTextView import io.legado.app.R import io.legado.app.utils.dp import io.legado.app.utils.getCompatColor -import io.legado.app.utils.sp -class BatteryView(context: Context, attrs: AttributeSet?) : View(context, attrs) { - private var battery = 100 - private val textPaint = TextPaint() - private var batteryHeight: Int = 0 - private var batteryWidth: Int = 0 +class BatteryView(context: Context, attrs: AttributeSet?) : AppCompatTextView(context, attrs) { + private val batteryPaint = Paint() private val outFrame = Rect() private val polar = Rect() init { - textPaint.textSize = 10.sp.toFloat() - textPaint.strokeWidth = 1.dp.toFloat() - textPaint.isAntiAlias = true - textPaint.textAlign = Paint.Align.CENTER - textPaint.color = context.getCompatColor(R.color.tv_text_default) - textPaint.typeface = Typeface.createFromAsset(context.assets, "number.ttf") - batteryHeight = with(textPaint.fontMetrics) { descent - ascent + leading }.toInt() - batteryWidth = StaticLayout.getDesiredWidth("100", textPaint).toInt() + 10.dp - outFrame.set(1.dp, 1.dp, batteryWidth - 3.dp, batteryHeight - 1.dp) - polar.set(outFrame.right, batteryHeight / 3, batteryWidth, batteryHeight * 2 / 3) - } - - override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { - super.onMeasure( - MeasureSpec.makeMeasureSpec(batteryWidth, MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(batteryHeight, MeasureSpec.EXACTLY) - ) + setPadding(4.dp, 0, 6.dp, 0) + batteryPaint.strokeWidth = 1.dp.toFloat() + batteryPaint.isAntiAlias = true + batteryPaint.color = context.getCompatColor(R.color.tv_text_default) } fun setColor(@ColorInt color: Int) { - textPaint.color = color + setTextColor(color) + batteryPaint.color = color invalidate() } + @SuppressLint("SetTextI18n") fun setBattery(battery: Int) { - this.battery = battery - invalidate() + text = "$battery" } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - textPaint.style = Paint.Style.STROKE - canvas.drawRect(outFrame, textPaint) - textPaint.style = Paint.Style.FILL - canvas.drawRect(polar, textPaint) - val text = battery.toString() - val baseHeight = batteryHeight - textPaint.fontMetrics.descent - canvas.drawText(text, outFrame.right / 2.toFloat(), baseHeight, textPaint) + outFrame.set( + 1.dp, + layout.getLineTop(0) + 2.dp, + width - 3.dp, + layout.getLineBottom(0) - 2.dp + ) + val dj = (outFrame.bottom - outFrame.top) / 3 + polar.set(outFrame.right, outFrame.top + dj, width - 1.dp, outFrame.bottom - dj) + batteryPaint.style = Paint.Style.STROKE + canvas.drawRect(outFrame, batteryPaint) + batteryPaint.style = Paint.Style.FILL + canvas.drawRect(polar, batteryPaint) } } \ No newline at end of file diff --git a/app/src/main/res/layout/view_book_page.xml b/app/src/main/res/layout/view_book_page.xml index fc80e05f5..922819b1e 100644 --- a/app/src/main/res/layout/view_book_page.xml +++ b/app/src/main/res/layout/view_book_page.xml @@ -78,7 +78,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="3dp" - tools:ignore="RtlHardcoded,RtlSymmetry" /> + android:textSize="10sp" + tools:ignore="RtlHardcoded,RtlSymmetry,SmallSp" />