Android自定义View Paint
生活随笔
收集整理的這篇文章主要介紹了
Android自定义View Paint
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/123524086
本文出自【趙彥軍的博客】
文章目錄
- 畫筆模式
- 畫線條
- 畫圓
- 畫矩形
- 畫弧形
- 其他
- 清空畫筆樣式
- 實戰-繪制圓環
- 實戰-圓環中繪制文字
本文示例代碼詳見:https://gitee.com/zhaoyanjun/text-draw
畫筆模式
mPaint.setStyle(Paint.Style.FILL); //設置畫筆模式為填充- STROKE //描邊
- FILL //填充
- FILL_AND_STROKE //描邊加填充
實驗代碼
Paint paint = new Paint(); paint.setColor(Color.BLUE); paint.setStrokeWidth(40); //為了實驗效果明顯,特地設置描邊寬度非常大// 描邊 paint.setStyle(Paint.Style.STROKE); canvas.drawCircle(200,200,100,paint);// 填充 paint.setStyle(Paint.Style.FILL); canvas.drawCircle(200,500,100,paint);// 描邊加填充 paint.setStyle(Paint.Style.FILL_AND_STROKE); canvas.drawCircle(200, 800, 100, paint);畫線條
class MyView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {private val paint = Paint()init {paint.color = resources.getColor(R.color.black, null) //畫筆顏色paint.isAntiAlias = true //抗鋸齒paint.strokeWidth = 30f //畫筆寬度}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val startX = width / 2fval startY = height / 2f//畫線條canvas.drawLine(startX, startY, startX + 200, startY + 200, paint)} }效果圖
setStrokeCap(Paint.Cap cap)設置線冒樣式,取值有
- Cap.ROUND(圓形線冒)
- Cap.SQUARE(方形線冒)
- Paint.Cap.BUTT(無線冒)
注意:冒多出來的那塊區域就是線帽!就相當于給原來的直線加上一個帽子一樣,所以叫線帽
setStrokeJoin(Paint.Join join)設置線段連接處樣式,取值有:
- Join.MITER(結合處為銳角)、
- Join.Round(結合處為圓弧)、
- Join.BEVEL(結合處為直線)
畫圓
canvas.drawCircle(startX, startY, 100f, paint)畫矩形
canvas.drawRect(startX, startY, startX + 100, startY + 100, paint)畫弧形
canvas.drawArc(rectF, 30f, 180f, true, paint)其他
setStrokeWidth(float width) 設置畫筆寬度 setAntiAlias(boolean aa) //抗鋸齒清空畫筆樣式
//清空畫筆復位 reset()源碼如此:
實戰-繪制圓環
效果圖
class MyView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {private val paint = Paint()private val radius = 300finit {paint.color = resources.getColor(R.color.black, null) //畫筆顏色paint.isAntiAlias = true //抗鋸齒}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val startX = width / 2fval startY = height / 2f//繪制圓環paint.color = Color.parseColor("#dddddd")paint.strokeWidth = 30fpaint.style = Paint.Style.STROKEcanvas.drawCircle(startX, startY, radius, paint)//繪制弧形paint.color = Color.REDpaint.strokeCap = Paint.Cap.ROUNDval rectF = RectF(startX - radius, startY - radius, startX + radius, startY + radius)canvas.drawArc(rectF, -90f, 225f, false, paint)} }實戰-圓環中繪制文字
重要的是文字居中顯示。
計算文字在圓環中的居中文字,有兩種方式:
- 方式一:paint.getTextBounds(content, 0, content.length, bounds)
- 方式二:val fontMetrics = paint.fontMetrics
具體示例,如下所示:
class MyView(context: Context, attrs: AttributeSet?) : View(context, attrs) {private val paint = Paint()private val radius = 300finit {paint.isAntiAlias = true //抗鋸齒}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val startX = width / 2fval startY = height / 2f//繪制圓環paint.color = Color.parseColor("#dddddd")paint.strokeWidth = 30fpaint.style = Paint.Style.STROKEcanvas.drawCircle(startX, startY, radius, paint)//繪制弧形paint.color = Color.REDpaint.strokeCap = Paint.Cap.ROUNDval rectF = RectF(startX - radius, startY - radius, startX + radius, startY + radius)canvas.drawArc(rectF, -90f, 225f, false, paint)//繪制文字val content = "ababcfp"paint.textSize = 80fpaint.style = Paint.Style.FILL//居中繪制paint.textAlign = Paint.Align.CENTER//加載字體paint.typeface = ResourcesCompat.getFont(context, R.font.fangzheng)//獲取文字的的邊界,這個邊界基于文字baselineval bounds = Rect()paint.getTextBounds(content, 0, content.length, bounds)//獲取邊界的高度val boundHeight = bounds.bottom - bounds.topcanvas.drawText(content, startX, startY + boundHeight / 2, paint)//方式二val fontMetrics = paint.fontMetricsval boundHeight2 = fontMetrics.descent - fontMetrics.ascentcanvas.drawText(content, startX, startY + boundHeight2 / 2, paint)} }總結
以上是生活随笔為你收集整理的Android自定义View Paint的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android骨架屏实现方案
- 下一篇: 《php中文网教学管理系统》总结