123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package com.ethan.psbc.ui.widget
- import android.content.Context
- import android.graphics.Canvas
- import android.graphics.Color
- import android.graphics.Paint
- import android.graphics.RectF
- import android.os.Handler
- import android.util.AttributeSet
- import android.util.TypedValue
- import android.view.View
- import androidx.constraintlayout.widget.ConstraintLayout
- import com.qmuiteam.qmui.util.QMUIDisplayHelper.getDisplayMetrics
- class CameraFocusView(context: Context?,attrs: AttributeSet?) : View(context,attrs) {
- private var focusSize = 0 //焦点框的大小
- private var focusColor = 0 //焦点框的颜色
- private var focusTime = 0 //焦点框显示的时长
- private var focusStrokeSize = 0 //焦点框线条的尺寸
- private var cornerSize = 0 //焦点框圆角尺寸
- private var handler: Handler? = null
- private var runnable: Runnable? = null
- private var mPaint: Paint? = null
- private var rect: RectF? = null
- init {
- if (context != null) {
- init(context)
- }
- }
- private fun init(context: Context) {
- handler = Handler()
- mPaint = Paint(Paint.ANTI_ALIAS_FLAG)
- rect = RectF()
- runnable = Runnable {
- hideFocusView()
- }
- }
- fun setParam(
- focusViewSize: Int, focusViewColor: Int, focusViewTime: Int,
- focusViewStrokeSize: Int, cornerViewSize: Int
- ) {
- if (focusViewSize == -1) {
- this.focusSize = dp2px(context, 60F)
- } else {
- this.focusSize = focusViewSize
- }
- if (focusViewColor == -1) {
- this.focusColor = Color.GREEN
- } else {
- this.focusColor = focusViewColor
- }
- this.focusTime = focusViewTime
- if (focusViewStrokeSize == -1) {
- this.focusStrokeSize = dp2px(context, 2F)
- } else {
- this.focusStrokeSize = focusViewStrokeSize
- }
- if (cornerViewSize == -1) {
- this.cornerSize = focusSize / 5
- } else {
- this.cornerSize = cornerViewSize
- }
- mPaint!!.style = Paint.Style.STROKE
- mPaint!!.strokeWidth = focusStrokeSize.toFloat()
- mPaint!!.color = focusColor
- rect!!.top = 0f
- rect!!.left = rect!!.top
- rect!!.bottom = focusSize.toFloat()
- rect!!.right = rect!!.bottom
- }
- fun showFocusView(x: Int, y: Int) {
- visibility = VISIBLE
- val layoutParams = layoutParams as ConstraintLayout.LayoutParams
- layoutParams.leftMargin = x - focusSize / 2
- layoutParams.topMargin = y - focusSize / 2
- setLayoutParams(layoutParams)
- invalidate()
- runnable?.let { handler?.postDelayed(it, (focusTime * 1000).toLong()) }
- }
- fun hideFocusView() {
- visibility = GONE
- runnable?.let { handler?.removeCallbacks(it) }
- }
- override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
- setMeasuredDimension(focusSize, focusSize)
- }
- override fun onDraw(canvas: Canvas) {
- super.onDraw(canvas)
- canvas.drawRoundRect(rect!!, cornerSize.toFloat(), cornerSize.toFloat(), mPaint!!)
- }
- override fun onDetachedFromWindow() {
- runnable?.let { handler?.removeCallbacks(it) }
- super.onDetachedFromWindow()
- }
- fun dp2px(mContext:Context, dipValue:Float) : Int {
- return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, getDisplayMetrics(mContext)).toInt()
- }
- }
|