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 package io.legado.app.ui.widget
import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.Paint import android.graphics.Paint
import android.graphics.Rect import android.graphics.Rect
import android.graphics.Typeface
import android.text.StaticLayout
import android.text.TextPaint
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.appcompat.widget.AppCompatTextView
import io.legado.app.R import io.legado.app.R
import io.legado.app.utils.dp import io.legado.app.utils.dp
import io.legado.app.utils.getCompatColor import io.legado.app.utils.getCompatColor
import io.legado.app.utils.sp
class BatteryView(context: Context, attrs: AttributeSet?) : View(context, attrs) { class BatteryView(context: Context, attrs: AttributeSet?) : AppCompatTextView(context, attrs) {
private var battery = 100 private val batteryPaint = Paint()
private val textPaint = TextPaint()
private var batteryHeight: Int = 0
private var batteryWidth: Int = 0
private val outFrame = Rect() private val outFrame = Rect()
private val polar = Rect() private val polar = Rect()
init { init {
textPaint.textSize = 10.sp.toFloat() setPadding(4.dp, 0, 6.dp, 0)
textPaint.strokeWidth = 1.dp.toFloat() batteryPaint.strokeWidth = 1.dp.toFloat()
textPaint.isAntiAlias = true batteryPaint.isAntiAlias = true
textPaint.textAlign = Paint.Align.CENTER batteryPaint.color = context.getCompatColor(R.color.tv_text_default)
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)
)
} }
fun setColor(@ColorInt color: Int) { fun setColor(@ColorInt color: Int) {
textPaint.color = color setTextColor(color)
batteryPaint.color = color
invalidate() invalidate()
} }
@SuppressLint("SetTextI18n")
fun setBattery(battery: Int) { fun setBattery(battery: Int) {
this.battery = battery text = "$battery"
invalidate()
} }
override fun onDraw(canvas: Canvas) { override fun onDraw(canvas: Canvas) {
super.onDraw(canvas) super.onDraw(canvas)
textPaint.style = Paint.Style.STROKE outFrame.set(
canvas.drawRect(outFrame, textPaint) 1.dp,
textPaint.style = Paint.Style.FILL layout.getLineTop(0) + 2.dp,
canvas.drawRect(polar, textPaint) width - 3.dp,
val text = battery.toString() layout.getLineBottom(0) - 2.dp
val baseHeight = batteryHeight - textPaint.fontMetrics.descent )
canvas.drawText(text, outFrame.right / 2.toFloat(), baseHeight, textPaint) 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_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="3dp" android:layout_marginLeft="3dp"
tools:ignore="RtlHardcoded,RtlSymmetry" /> android:textSize="10sp"
tools:ignore="RtlHardcoded,RtlSymmetry,SmallSp" />
</LinearLayout> </LinearLayout>

Loading…
Cancel
Save