美文网首页
自定义View-田字格

自定义View-田字格

作者: Android小豆渣 | 来源:发表于2022-02-25 10:03 被阅读0次
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()
    }
}

相关文章

  • 自定义View-田字格

  • 1到10书写要求

    今天我们学习怎么规范的书写数字1到10,首先我们认识田字格,田字格分为左半格和右半格,这是田字格的左上格,这是田字...

  • 1到10书写要求

    今天我们学习怎么规范的书写数字1到10,首先我们认识田字格,田字格分为左半格和右半格,这是田字格的左上格,这是田字...

  • 2019-12-23

    自定义view画渐变图形,inflate 自定义view:画渐变图形 参考:自定义View-第十六步:Linear...

  • 人生田字格

    一、人生不过九百格 有人在问答类网站Quora上问:“很令你吃惊的事实是什么?”其中很震撼的答案是:“人生只有90...

  • 用好田字格

    低年级学生练字是关键,我也一直很重视,但学生们还是不按汉字在田字格里的间架结构来写,写出来的字大小不一,扭扭歪歪,...

  • Excel小技巧:如何制作田字格?

    Excel如何制作田字格?Excel里面制作田字格,让小Q来给您演示一下。 1、全选单元格,在A上面鼠标右击设置列...

  • Android自定义View-圆形图片控件

    个人博客http://www.milovetingting.cn Android自定义View-圆形图片控件 前言...

  • 家有小学生必备字体,拼音体、田字格体、九宫格体,笔顺字帖体,统统

    一、在线使用字体* 田字格字帖在线使用* 文字搜索【田字格生成器】 二、直接下载使用拼音类字体下载华康黑体...

  • 童年三两事|做作业

    老师:“小朋友们,今天新教的字,一个字一页田字格。写满三页拼音田字格,大家就可以回家了。” 同学们:“好。” 老师...

网友评论

      本文标题:自定义View-田字格

      本文链接:https://www.haomeiwen.com/subject/lziblrtx.html