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-田字格
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 前言 对于Android程序员来说,自定义View是绕不过的话题,作为Android终端,除了一些后台应用,大部分...
- 本文出自简书:尧沐,如需转载请标明出处,尊重原创谢谢博客地址:http://www.jianshu.com/p/6...
- 一、概述 继续学习自定义view,主要还是讲解画笔,实现的功能是用两种颜色的画笔画文字,根据滑动的偏移量,实现颜色...