先来看看效果图

先分析饼状图的构成,非常明显,饼状图就是一个又一个的扇形构成的,每个扇形都有不同的颜色,对应的有名字,数据和百分比。

经以上信息可以得出饼状图的最基本数据应包括:名字 数据值 百分比 对应的角度 颜色。

用户关心的数据 :名字 数据值 百分比

需要程序计算的数据: 百分比 对应的角度

其中颜色这一项可以用户指

public class PieData {

private String name; // 名字

private float value; // 数值

private float percentage; // 百分比

private int color = 0; // 颜色

private float angle = 0; // 角度

public PieData(@NonNull String name, @NonNull float value) {

this.name = name;

this.value = value;

}

}

自定义View:

先按照自定义View流程梳理一遍(确定各个步骤应该做的事情):

步骤

关键字

作用

1

构造函数

初始化(初始化画笔Paint)

2

onMeasure

测量View的大小(暂时不用关心)

3

onSizeChanged

确定View大小(记录当前View的宽高)

4

nLayout

确定子View布局(无子View,不关心)

5

onDraw

实际绘制内容(绘制饼状图)

6

提供接口

提供接口(提供设置数据的接口)

代码如下:

public class PieView extends View {

// 颜色表

private int[] mColors = {0xFFCCFF00, 0xFF6495ED, 0xFFE32636, 0xFF800000, 0xFF808000, 0xFFFF8C69, 0xFF808080,

0xFFE6B800, 0xFF7CFC00};

// 饼状图初始绘制角度

private float mStartAngle = 0;

// 数据

private ArrayList mData;

// 宽高

private int mWidth, mHeight;

// 画笔

private Paint mPaint = new Paint();

public PieView(Context context) {

this(context, null);

}

public PieView(Context context, AttributeSet attrs) {

super(context, attrs);

mPaint.setStyle(Paint.Style.FILL);

mPaint.setAntiAlias(true);

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

mWidth = w;

mHeight = h;

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

if (null == mData)

return;

float currentStartAngle = mStartAngle; // 当前起始角度

canvas.translate(mWidth / 2, mHeight / 2); // 将画布坐标原点移动到中心位置

float r = (float) (Math.min(mWidth, mHeight) / 2 * 0.8); // 饼状图半径

RectF rect = new RectF(-r, -r, r, r); // 饼状图绘制区域

for (int i = 0; i < mData.size(); i++) {

PieData pie = mData.get(i);

mPaint.setColor(pie.getColor());

canvas.drawArc(rect, currentStartAngle, pie.getAngle(), true, mPaint);

currentStartAngle += pie.getAngle();

}

}

// 设置起始角度

public void setStartAngle(int mStartAngle) {

this.mStartAngle = mStartAngle;

invalidate(); // 刷新

}

// 设置数据

public void setData(ArrayList mData) {

this.mData = mData;

initDate(mData);

invalidate(); // 刷新

}

// 初始化数据

private void initDate(ArrayList mData) {

if (null == mData || mData.size() == 0) // 数据有问题 直接返回

return;

float sumValue = 0;

for (int i = 0; i < mData.size(); i++) {

PieData pie = mData.get(i);

sumValue += pie.getValue(); //计算数值和

int j = i % mColors.length; //设置颜色

pie.setColor(mColors[j]);

}

float sumAngle = 0;

for (int i = 0; i < mData.size(); i++) {

PieData pie = mData.get(i);

float percentage = pie.getValue() / sumValue; // 百分比

float angle = percentage * 360; // 对应的角度

pie.setPercentage(percentage); // 记录百分比

pie.setAngle(angle); // 记录角度大小

sumAngle += angle;

Log.i("angle", "" + pie.getAngle());

}

}

注意:在更改了数据需要重绘界面时要调用invalidate()这个函数重新绘制。

以上就是小编为大家整理的安卓(Android)中自定义饼状图的制作思路,利用实例代码实现饼状图就很简单了,希望本文对大家开发安卓(Android)有所帮助。

安卓饼状图设置软件_安卓(Android)开发之自定义饼状图相关推荐

  1. 安卓饼状图设置软件_话单及银行卡交易智能分析软件

    一.产品概况: 思迈奥SMILE数据智能分析软件是由我司自主设计与研发的一款结合在公安和检察院的侦查业务经验而定制研发的数据智能分析系统,包含于话单.电子银行账单.及其它数据(个人出行数据.社会资源数 ...

  2. 安卓饼状图设置软件_饼图生成器app下载|饼图生成器安卓版下载_v1.1.0_9ht安卓下载...

    饼图生成器是一款非常好用的饼图生成软件,只需要输入各项名称.数值等就可以一键生成,还可以自定义修改颜色,需要的朋友赶紧下载吧! 饼图生成器介绍 饼图生成器,供您创建各式各样的图表.支持自由布局与-您只 ...

  3. web切图怎么做_做前端开发必需要掌握切图技能吗?

    我04年的时候开始学习前端,在那个时候,国外基本上转型到了HTML+CSS,而国内貌似HTML+CSS刚刚兴起(不熟,如果时间不准确请纠正).所以我基本上没有做过Table-based design. ...

  4. 简单的入门Android开发和Java语言基础[图]

    简单的入门Android开发和Java语言基础[图] 前言: 去年年底到今年年初,我做过简单的智能家居,也实现过一些简单的直连和远程的智能家居.于是就将最简单的通信发布出来:智能家居简单实现-使用ES ...

  5. 安卓设置原生alert设置圆角_安卓手机设置充电提示音全新最全教程

    安卓版充电提示音教程_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​m.bilibili.com 哎,自从前端时间IOS14发布后,他的其他所有功能没有活,唯一火了充电提示音.奈何大傻没有苹果手 ...

  6. 安卓通讯录管理软件_安卓系统50个你不知道的使用窍门!每个都值得你去收藏!...

    今天给大家介绍下安卓系统的安卓手机的使用技巧方法,以时下最为普遍最主流的Android 2.3系统为例,不过大部分使用技巧在其他版本的安卓系统上同样适用. 1.使用Android电源管理widget从 ...

  7. 安卓手机主题软件_安卓主题壁纸app下载-安卓主题壁纸软件下载v9.0.7

    安卓主题壁纸是专门为广大安卓用户打造的一款主题美化软件,用户们可以在这里选择各种类型的主题和壁纸,大家可以完全免费的下载,丰富的类型以及各种华丽的特效等着大家来自定义选择,丰富的榜单让大家可以轻松找到 ...

  8. adb安装软件_安卓手表ADB实用工具箱:给你的安卓手表来点不一样的

    安卓手表ADB实用工具箱是由酷安开发者(ID@明风の岚 )开发的一款针对于安卓手表的工具箱,其基于ADB命令,用可视化的界面实现对安卓手表(同时也兼容(兼容安卓手机以及安卓系统的智能电视)进行一些操作 ...

  9. 安卓手机端口号怎么查看_安卓手机来电闪光灯怎么设置

    现在不少手机都会提供来电提醒闪光灯功能,通过手机原有的闪光灯来提醒用户.那么安卓手机来电闪光灯怎么设置呢?下面给大家介绍一下设置方法吧. 安卓手机来电闪光灯怎么设置 1.在安卓的原生系统上没有自带有来 ...

最新文章

  1. java 知乎面试题_Java并发面试题自己总结
  2. 用c#算成绩的总和_C# 基础知识系列- 6 Lambda表达式和Linq简单介绍
  3. SAP UI5 get route - local version VS central version
  4. C#中使用Oracle 存储过程笔记
  5. Memcache for Windows
  6. 打造最便捷的异步分页技术(提供下载)
  7. 201521123059 《Java程序设计》第三周学习总结
  8. 详解MySQL中EXPLAIN解释命令(转)
  9. 【NOIP2018】龙虎斗
  10. 流量计算机组成keypad,曾经的我
  11. Beosin成都链安安全舆情系统上线 公众号更新全新体验!
  12. 对sql文件进行读取并通过JDBC批量执行
  13. 蓝桥杯 算法提高 盾神与积木游戏
  14. GitHub部署静态网页
  15. 软件测试工程师必备技能(初中高)
  16. 主流HTML5游戏开发引擎的分析和对比
  17. 爬虫基础之动态网页数据抓取(下)
  18. 2020 Stibo Systems全球事业部新财年启动大会胜利召开
  19. Office Tips 3 - 如何设置电脑屏幕背景色为淡绿色
  20. jbuilder的set!方法重构接口

热门文章

  1. 解决queryForObject查询抛异常的问题
  2. 2020ICPC·小米 网络选拔赛第一场 J.Matrix Subtraction
  3. layui隐藏侧边栏_【Layui】侧边菜单导航禁用折叠、去除箭头样式
  4. rs232读取智能电表_南网的智能电表和国网的智能电表有什么功能区别呢?
  5. linux下载神器aria2
  6. Mac电脑怎么样可以锁定屏幕?
  7. 1_data_reliablility_for_data_lakes
  8. 分享三种高效的方法,快速将一个PDF文件分割成两个!
  9. NLP教程:教你如何自动生成对联
  10. VB编程应养成的七大好习惯(转)