亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android 自定義 View 實現餅狀圖

標簽:
Android

参考文章中的效果图:


webp

image.png


添加文本之后的效果图:


webp

image.png

实现过程

  • 扇形的绘制

  • 文本的绘制

扇形的绘制

使用 canvas.drawArc(); 绘制

drawArc有两个构造方法

// 第一种public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint){}    
// 第二种public void drawArc(float left, float top, float right, float bottom, float startAngle,            float sweepAngle, boolean useCenter, @NonNull Paint paint) {}

ps: 详细使用看顶部参考文章。

我们这里使用第一个构造方法,从构造方法看出需要这几个参数

  • RectF:绘制的范围,通过一个矩形来限定范围

  • startAngle:扇形开始的角度

  • sweepAngle:扇形扫过的角度

  • useCenter:是否使用中心,中心点之后绘制出来类似于一个扇形,而不使用中心点则是圆弧起始点和结束点之间的连线加上圆弧围成的图形。

  • paint:画笔

这里需要注意的是:扇形的默认开始角度如下图:安卓自定义View基础-角度与弧度

webp

角度与弧度


到这里应该就能绘制出扇形了


webp

image.png

饼状图目的是为了展示数据,所以下一步我们就将文本数据画进去。

文本的绘制

绘制文本的构造函数如下:安卓自定义View进阶-Canvas之图片文字

public void drawText (String text, float x, float y, Paint paint)

我们的目的是在扇形的中心坐标绘制描述文本,那么怎么获取中心坐标就很重要了。在获取了中心坐标之后直接调用上面的构造函数即可绘制文字了

webp

image.png

  • 三角形函数理解
    上图中的 x,y坐标就是通过三角函数求得

  //计算当前角度的一半
            float textAngle = mCurrentStartAngle + pieData.getAngle() / 2;            // 扇形的中心坐标
            float x = (float) (r / 2 * Math.cos(textAngle * Math.PI / 180));            float y = (float) (r / 2 * Math.sin(textAngle * Math.PI / 180));
  • 居中文本的绘制
    由于文字长度不同,需要先计算出文字的中心。所以这里居中文字的横坐标为:

(x - mTextPaint.measureText(name)/2)

所以绘制名称我们就可以通过下面的函数来完成

 // 名称居中canvas.drawText(name, (x - mTextPaint.measureText(name)/2), y ,mTextPaint);

我们还想在名称下方绘制百分比。

这时候根据上面的经验,可以得到百分比的居中坐标,这时候只要再加上名称文本的高度,即可实现在文本下方绘制百分比。

// 名称 文本的高度Rect rect = new Rect();
mTextPaint.getTextBounds(name, 0, name.length(), rect);int height = rect.height();// 绘制百分比canvas.drawText(percentage, (x - mTextPaint.measureText(percentage)/2), (y + height*2) ,m



作者:_龙衣
链接:https://www.jianshu.com/p/f5ec52f8853a


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消