feat: 优化代码

pull/142/head
kunfei 5 years ago
parent 5f7c18a781
commit 48bfabcbea
  1. 61
      app/src/main/java/io/legado/app/ui/widget/BatteryView.kt
  2. 3
      app/src/main/res/layout/view_book_page.xml

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

@ -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" />
</LinearLayout>

Loading…
Cancel
Save