日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android自定义View Paint

發布時間:2024/9/30 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。