有幸看到了下邊這篇文章,感覺很不錯,自己比葫蘆畫瓢學習了一下,按照步驟把畫的圖形一步步拼湊,就實現了太極圖,有興趣的可以看原文鏈接,下邊上圖上源碼
二十多行代碼畫太極
太極圖
代碼實現過程
class TigetView : View {
private var viewSize = 0f
private lateinit var blackPaint: Paint
private lateinit var whitePaint: Paint
private lateinit var rectF: RectF
constructor(context: Context) : super(context) {
initCustom(context, null)
}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
initCustom(context, attrs)
}
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
initCustom(context, attrs)
}
private fun initCustom(context: Context, attrs: AttributeSet?) {
blackPaint = Paint().apply {
color = Color.BLACK
isAntiAlias = true
}
whitePaint = Paint().apply {
color = Color.WHITE
isAntiAlias = true
}
rectF = RectF()
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
viewSize = Math.min(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec)).toFloat()
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
canvas.translate(viewSize / 2, viewSize / 2)
canvas.drawColor(Color.GRAY)
val radius = viewSize / 2 - paddingLeft
rectF.set(-radius, -radius, radius, radius)
canvas.drawArc(rectF, 90f, 180f, true, whitePaint)
canvas.drawArc(rectF, -90f, 180f, true, blackPaint)
val smallRadius = radius / 2
canvas.drawCircle(0f, -smallRadius, smallRadius, whitePaint)
canvas.drawCircle(0f, smallRadius, smallRadius, blackPaint)
canvas.drawCircle(0f, -smallRadius, smallRadius / 4, blackPaint)
canvas.drawCircle(0f, smallRadius, smallRadius / 4, whitePaint)
}
}