自定义View-田字格

class MandarinTextView(context: Context, attrs: AttributeSet?) :
    AppCompatTextView(context, attrs) {
    //外框线
    private var mLinePaint: Paint = Paint()

    //内十字线
    private var mDottedLinePaint: Paint = Paint()

    //田字格区域
    private var r2: RectF = RectF()

    //外框颜色
    private var outlineColor: Int

    //内框颜色
    private var inlineColor: Int

    //外框宽度
    private var outlineWidth: Int

    //内框宽度
    private var inlineWidth: Int

    //外框圆度
    private var borderRadius: Int

    //内框透明度
    private var inlineAlpha: Float

    init {
        // 获取参数
        val ta = context.obtainStyledAttributes(
            attrs,
            R.styleable.MandarinTextView
        )
        outlineColor = ta.getColor(
            R.styleable.MandarinTextView_outlineColor,
            Color.parseColor("#666666")
        )
        inlineColor = ta.getColor(
            R.styleable.MandarinTextView_inlineColor,
            Color.parseColor("#DDDDDD")
        )
        outlineWidth = ta.getDimensionPixelSize(
            R.styleable.MandarinTextView_outlineWidth,
            0.5f.px.toInt()
        )
        inlineWidth = ta.getDimensionPixelSize(
            R.styleable.MandarinTextView_inlineWidth,
            0.5f.px.toInt()
        )
        borderRadius = ta.getDimensionPixelSize(
            R.styleable.MandarinTextView_outlineRadius,
            5f.px.toInt()
        )
        inlineAlpha = ta.getFloat(
            R.styleable.MandarinTextView_inlineAlpha,
            0.8f
        )
        // 释放资源
        ta.recycle()

        mLinePaint.color = outlineColor
        mLinePaint.style = Paint.Style.STROKE
        mLinePaint.strokeWidth = outlineWidth.toFloat()
        mLinePaint.isAntiAlias = true
        mLinePaint.pathEffect = DashPathEffect(floatArrayOf(15f, 10f), 0f)

        mDottedLinePaint.color = inlineColor
        mDottedLinePaint.style = Paint.Style.STROKE
        mDottedLinePaint.strokeWidth = inlineWidth.toFloat()
        mDottedLinePaint.isAntiAlias = true
        mDottedLinePaint.alpha = (255 * inlineAlpha).toInt()
        mDottedLinePaint.pathEffect = DashPathEffect(floatArrayOf(15f, 10f), 0f)
    }

    override fun onDraw(canvas: Canvas) {
        canvas.drawLine(width / 2f, 0f, width / 2f, height.toFloat(), mDottedLinePaint)
        canvas.drawLine(0f, height / 2f, width.toFloat(), height / 2f, mDottedLinePaint)

        r2.set(
            0f + outlineWidth / 2,
            0f + outlineWidth / 2,
            width.toFloat() - outlineWidth / 2,
            height.toFloat() - outlineWidth / 2
        )
        canvas.drawRoundRect(r2, borderRadius.toFloat(), borderRadius.toFloat(), mLinePaint)
        super.onDraw(canvas)
    }

    fun setOutlineColor(color: Int) {
        outlineColor = color
        mLinePaint.color = outlineColor
        invalidate()
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容