1.map页改版前
This commit is contained in:
133
app/src/main/java/com/abbidot/tracker/widget/MapBatteryView.kt
Normal file
133
app/src/main/java/com/abbidot/tracker/widget/MapBatteryView.kt
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
package com.abbidot.tracker.widget
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.Paint
|
||||||
|
import android.graphics.Path
|
||||||
|
import android.text.TextUtils
|
||||||
|
import android.util.AttributeSet
|
||||||
|
import android.view.View
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
|
import com.abbidot.baselibrary.util.AppUtils
|
||||||
|
import com.abbidot.tracker.R
|
||||||
|
import com.qmuiteam.qmui.util.QMUIDisplayHelper
|
||||||
|
|
||||||
|
/**
|
||||||
|
*Created by .yzq on 2024/8/26/026.
|
||||||
|
* @link
|
||||||
|
* @description:
|
||||||
|
*/
|
||||||
|
class MapBatteryView : View {
|
||||||
|
|
||||||
|
private lateinit var mContext: Context
|
||||||
|
private var mOffsetX = 0
|
||||||
|
private var mOffsetY = 0
|
||||||
|
|
||||||
|
//文字和边界的距离。三角形的直线长
|
||||||
|
private var mPadding = 0
|
||||||
|
|
||||||
|
private lateinit var mTextPaint: Paint
|
||||||
|
private lateinit var mPaint: Paint
|
||||||
|
|
||||||
|
//小三角形的path
|
||||||
|
private lateinit var mTrianglePath: Path
|
||||||
|
|
||||||
|
private var mTimeText = ""
|
||||||
|
private var mAddressText = ""
|
||||||
|
|
||||||
|
constructor(context: Context) : super(context) {
|
||||||
|
init(context)
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
||||||
|
context, attrs, defStyleAttr
|
||||||
|
) {
|
||||||
|
init(context)
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
|
||||||
|
init(context)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun init(context: Context) {
|
||||||
|
//禁用硬件加速,防止返回到界面多次执行onDraw
|
||||||
|
setLayerType(LAYER_TYPE_SOFTWARE, null)
|
||||||
|
mContext = context
|
||||||
|
mPaint = Paint().apply {
|
||||||
|
color = ContextCompat.getColor(mContext, R.color.white)
|
||||||
|
}
|
||||||
|
//开启抗锯齿
|
||||||
|
mTextPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||||
|
color = ContextCompat.getColor(mContext, R.color.black)
|
||||||
|
textSize = QMUIDisplayHelper.sp2px(mContext, 12).toFloat()
|
||||||
|
}
|
||||||
|
mPadding = AppUtils.dpToPx(6)
|
||||||
|
|
||||||
|
mTrianglePath = Path()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDraw(canvas: Canvas) {
|
||||||
|
super.onDraw(canvas)
|
||||||
|
canvas.apply {
|
||||||
|
startDraw(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun startDraw(canvas: Canvas) {
|
||||||
|
if (TextUtils.isEmpty(mAddressText) && TextUtils.isEmpty(mTimeText)) return
|
||||||
|
mTrianglePath.apply {
|
||||||
|
reset()
|
||||||
|
moveTo((mOffsetX - mPadding).toFloat(), (mOffsetY - mPadding).toFloat())
|
||||||
|
lineTo(mOffsetX.toFloat(), mOffsetY.toFloat())
|
||||||
|
lineTo((mOffsetX + mPadding).toFloat(), (mOffsetY - mPadding).toFloat())
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
canvas.apply {
|
||||||
|
|
||||||
|
drawPath(mTrianglePath, mPaint)
|
||||||
|
|
||||||
|
val fontMetrics = mTextPaint.fontMetrics
|
||||||
|
//文字高度
|
||||||
|
val textHeight = fontMetrics.bottom - fontMetrics.top
|
||||||
|
//时间文字宽度
|
||||||
|
val timeTextWith = mTextPaint.measureText(mTimeText)
|
||||||
|
//地址文字宽度
|
||||||
|
val addressTextWith = mTextPaint.measureText(mAddressText)
|
||||||
|
val maxTextWith = maxOf(timeTextWith, addressTextWith)
|
||||||
|
|
||||||
|
drawRoundRect(
|
||||||
|
mOffsetX - maxTextWith / 2 - mPadding,
|
||||||
|
mOffsetY - textHeight * 2 - mPadding * 2,
|
||||||
|
mOffsetX + maxTextWith / 2 + mPadding,
|
||||||
|
mOffsetY.toFloat() - mPadding,
|
||||||
|
AppUtils.dpToPx(6f),
|
||||||
|
AppUtils.dpToPx(6f),
|
||||||
|
mPaint
|
||||||
|
)
|
||||||
|
drawText(
|
||||||
|
mTimeText,
|
||||||
|
mOffsetX - timeTextWith / 2,
|
||||||
|
mOffsetY - textHeight / 2 - mPadding,
|
||||||
|
mTextPaint
|
||||||
|
)
|
||||||
|
drawText(
|
||||||
|
mAddressText,
|
||||||
|
mOffsetX - addressTextWith / 2,
|
||||||
|
mOffsetY - textHeight / 2 - textHeight - mPadding,
|
||||||
|
mTextPaint
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setShowText(time: String, address: String) {
|
||||||
|
mTimeText = time
|
||||||
|
mAddressText = address
|
||||||
|
invalidate()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setOffsetXY(x: Int, y: Int) {
|
||||||
|
mOffsetX = x
|
||||||
|
mOffsetY = y
|
||||||
|
invalidate()
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user