noo*_*oob 3 android android-view kotlin
我是初学者。这几天开始学习自定义视图,过程中几乎没有出现什么问题。
\n当我去Google解决这个问题的时候,有人提出了解决方案,但是都没有成功。我使用 Kotlin 编写的自定义视图。
\n这是我的自定义视图类,名称是MyView.kt
\npackage com.example.demos\n\nimport android.R\nimport android.content.Context\nimport android.content.res.TypedArray\nimport android.graphics.Canvas\nimport android.graphics.Color\nimport android.graphics.Paint\nimport android.graphics.RectF\nimport android.util.AttributeSet\nimport android.view.View\nimport kotlin.math.min\n\n\nclass MyView : View {\n // init\n private lateinit var arcPaint: Paint\n private lateinit var progressTextPaint: Paint\n// private lateinit var arcPaintColor: Color\n private var arcPaintColor = Color.BLACK\n// private lateinit var progressTextPaintColor: Color\n private var progressTextPaintColor = Color.BLACK\n private var angle = 0f\n private var progress: Float = angle / 3.6f\n\n\n // get/set\n fun setArcPaintColor(color: Int) {\n arcPaintColor = color\n }\n\n fun getArcPaintColor(): Int {\n return arcPaintColor\n }\n\n fun setProgressTextPaintColor(color: Int) {\n progressTextPaintColor = color\n }\n\n fun getProgressTextPaintColor(): Int {\n return progressTextPaintColor\n }\n\n fun setAngle(float: Float) {\n angle = float\n progress = angle / 3.6f\n invalidate()\n }\n\n fun getAngle(): Float {\n return angle\n }\n\n fun setProgress(float: Float) {\n progress = float\n angle = progress * 3.6f\n invalidate()\n }\n\n fun getProgress(): Float {\n return progress\n }\n\n /*call method initPaint()*/\n constructor(context: Context) : super(context) {\n initPaint()\n }\n\n constructor(context: Context, attributeSet: AttributeSet?) : super(context, attributeSet) {\n initPaint()\n }\n\n constructor(context: Context, attributeSet: AttributeSet?, defStyleAttr: Int) : super(\n context,\n attributeSet,\n defStyleAttr\n ) {\n arcPaintColor = typedArray.getColor(R.styleable.arcPaintColor,)\n initPaint()\n }\n\n\n /*override onDraw()\xef\xbc\x8cdraw view*/\n override fun onDraw(canvas: Canvas?) {\n super.onDraw(canvas)\n drawView(canvas)\n }\n\n //init paints\n private fun initPaint() {\n arcPaint = Paint(Paint.ANTI_ALIAS_FLAG).also {\n it.color = arcPaintColor\n it.strokeWidth = 5f\n it.strokeWidth = 40f\n it.style = Paint.Style.STROKE\n it.strokeCap = Paint.Cap.ROUND\n }\n progressTextPaint = Paint(Paint.ANTI_ALIAS_FLAG).also {\n it.color = progressTextPaintColor\n// it.color = Color.GREEN\n// it.setStrokeWidth(5f)\n it.style = Paint.Style.FILL\n it.textSize = 50f\n }\n }\n\n /*draw view*/\n private fun drawView(canvas: Canvas?) {\n val displayWidth = width\n val displayHeight = height\n /*get center of circle*/\n val centerX = (displayWidth / 2).toFloat()\n val centerY = (displayHeight / 2).toFloat()\n\n /*get radius*/\n val radius = min(displayWidth, displayHeight) / 4\n\n\n val rectF = RectF(\n centerX - radius,\n centerY - radius,\n centerX + radius,\n centerY + radius\n )\n\n\n canvas?.drawArc(\n rectF,\n 0f,\n angle,\n false,\n arcPaint\n )\n\n canvas?.drawText(\n "${String.format("%.1f", progress)}%",\n centerX - progressTextPaint.measureText("${String.format("%.1f", progress)}%") / 2,\n centerY,\n progressTextPaint\n )\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n这是我的自定义属性的 xml 文件
\n<?xml version="1.0" encoding="utf-8"?>\n<resources>\n <declare-styleable name="MyView">\n <attr name="arcPaintColor" format="color"/>\n <attr name="progressTextPaintColor" format="color"/>\n </declare-styleable>\n</resources>\nRun Code Online (Sandbox Code Playgroud)\n\n
| 归档时间: |
|
| 查看次数: |
2258 次 |
| 最近记录: |