Android MPAndroidChart之PieChart和数据结构以及模型【5】

简介: Android MPAndroidChart之PieChart和数据结构以及模型【5】以MPAndroidChart的饼状图PieChart为例。
Android MPAndroidChart之PieChart和数据结构以及模型【5】


以MPAndroidChart的饼状图PieChart为例。
测试的MainActivity的Java代码:
package com.example.piechart;

import java.util.ArrayList;

import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.formatter.PercentFormatter;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

/*
 * MPAndroidChart比较复杂的部分在于绘制图表的数据源的数据结构。
 * 通常,在一个二位的坐标体系内,一个任意的坐标点应包含(x,y)这样的对应数据点。
 * 一般模型是在x坐标轴的x-i位置,y存在一个对应的y-i值对应,形成坐标点(i-x,i-y)
 * MPAndroidChart在一定角度上将x轴的数据集处理成(i,字符标签)的简单模式,
 * 但MPAndroidChart对于y轴的数据集整合成复杂的复合体。初级,y轴的Entry包含(x,y)这样的坐标点数据。
 * 比如,在坐标点(xi,yi)的位置绘制数据点,那么在MPAndroidChart中,在x轴的i位置绘制字符串表示是x坐标轴的数值,然后构造y坐标轴的Entry,Entry包含(value,i)
 * 
 * */

public class MainActivity extends Activity {

	private PieChart mChart;
	private String[] x = new String[] { "A类事物", "B类事物", "C类事物" };

	// 凑成100 % 100
	private float[] y = { 10f, 60f, 30f };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mChart = (PieChart) findViewById(R.id.chart);

		// 图的描述
		mChart.setDescription("by Zhang Phil @ http://blog.csdn.net/zhangphil");

		// 以3个对应数据集做测试
		setData(x.length);
	}

	private void setData(int count) {

		// 准备x"轴"数据:在i的位置,显示x[i]字符串
		ArrayList<String> xVals = new ArrayList<String>();

		// 真实的饼状图百分比分区。
		// Entry包含两个重要数据内容:position和该position的数值。
		ArrayList<Entry> yVals = new ArrayList<Entry>();

		for (int xi = 0; xi < count; xi++) {
			xVals.add(xi, x[xi]);

			// y[i]代表在x轴的i位置真实的百分比占
			yVals.add(new Entry(y[xi], xi));
		}

		PieDataSet yDataSet = new PieDataSet(yVals, "百分比占");

		// 每个百分比占区块绘制的不同颜色
		ArrayList<Integer> colors = new ArrayList<Integer>();
		colors.add(Color.RED);
		colors.add(Color.GREEN);
		colors.add(Color.BLUE);
		yDataSet.setColors(colors);

		// 将x轴和y轴设置给PieData作为数据源
		PieData data = new PieData(xVals, yDataSet);

		// 设置成PercentFormatter将追加%号
		data.setValueFormatter(new PercentFormatter());

		// 文字的颜色
		data.setValueTextColor(Color.BLACK);

		// 最终将全部完整的数据喂给PieChart
		mChart.setData(data);
		mChart.invalidate();
	}
}



需要的布局文件,其实就一个PieChart元素:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.piechart.MainActivity" >

    <com.github.mikephil.charting.charts.PieChart
        android:id="@+id/chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>


代码运行结果:




相关文章:
【1】《Android统计图表MPAndroidChart》链接地址:http://blog.csdn.net/zhangphil/article/details/47656521 
【2】《基于Android MPAndroidChart实现腾讯QQ群数据统计报表核心功能》链接地址:http://blog.csdn.net/zhangphil/article/details/47685515 
【3】《Android实现天气预报温度/气温折线趋势图》链接地址:http://blog.csdn.net/zhangphil/article/details/47702245 
【4】《Android统计图表之柱状图(条形图)》链接地址:http://blog.csdn.net/zhangphil/article/details/47727913 


【5】MPAndroidChart在github上的项目主页:https://github.com/PhilJay/MPAndroidChart
相关文章
|
1月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
160 4
|
4月前
|
开发工具 Android开发 开发者
Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?
本文介绍了一种在Android平台上实现实时截图快照的方法,尤其适用于无需依赖系统接口的情况,如在RTMP推送、RTSP服务或GB28181设备接入等场景下进行截图。通过底层模块(libSmartPublisher.so)实现了截图功能,封装了`SnapShotImpl.java`类来管理截图流程。此外,提供了关键代码片段展示初始化SDK实例、执行截图、以及在Activity销毁时释放资源的过程。此方案还考虑到了快照数据的灵活处理需求,符合GB/T28181-2022的技术规范。对于寻求更灵活快照机制的开发者来说,这是一个值得参考的设计思路。
|
6月前
|
XML 存储 JSON
51. 【Android教程】JSON 数据解析
51. 【Android教程】JSON 数据解析
162 2
|
6月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
110 0
|
7月前
|
数据库 Android开发
Android 通过升级SettingsProvider数据强制覆盖用户的设置项
Android 通过升级SettingsProvider数据强制覆盖用户的设置项 【5月更文挑战第7天】
205 5
|
2月前
|
存储 大数据 数据库
Android经典面试题之Intent传递数据大小为什么限制是1M?
在 Android 中,使用 Intent 传递数据时存在约 1MB 的大小限制,这是由于 Binder 机制的事务缓冲区限制、Intent 的设计初衷以及内存消耗和性能问题所致。推荐使用文件存储、SharedPreferences、数据库存储或 ContentProvider 等方式传递大数据。
99 0
|
4月前
|
机器学习/深度学习 人工智能 算法
【人工智能】线性回归模型:数据结构、算法详解与人工智能应用,附代码实现
线性回归是一种预测性建模技术,它研究的是因变量(目标)和自变量(特征)之间的关系。这种关系可以表示为一个线性方程,其中因变量是自变量的线性组合。
91 2
|
4月前
|
JSON Java Android开发
Android 开发者必备秘籍:轻松攻克 JSON 格式数据解析难题,让你的应用更出色!
【8月更文挑战第18天】在Android开发中,解析JSON数据至关重要。JSON以其简洁和易读成为首选的数据交换格式。开发者可通过多种途径解析JSON,如使用内置的`JSONObject`和`JSONArray`类直接操作数据,或借助Google提供的Gson库将JSON自动映射为Java对象。无论哪种方法,正确解析JSON都是实现高效应用的关键,能帮助开发者处理网络请求返回的数据,并将其展示给用户,从而提升应用的功能性和用户体验。
115 1
|
4月前
|
缓存 API Android开发
Android经典实战之Kotlin Flow中的3个数据相关的操作符:debounce、buffer和conflate
本文介绍了Kotlin中`Flow`的`debounce`、`buffer`及`conflate`三个操作符。`debounce`过滤快速连续数据,仅保留指定时间内的最后一个;`buffer`引入缓存减轻背压;`conflate`仅保留最新数据。通过示例展示了如何在搜索输入和数据流处理中应用这些操作符以提高程序效率和用户体验。
57 6
|
4月前
|
编解码 网络协议 前端开发
如何实现Android平台GB28181设备接入模块按需打开摄像头并回传数据
后台采集摄像头,如果想再进一步扩展,可以把android平台gb28181的camera2 demo,都移植过来,实现功能更强大的国标设备侧,这里主要是展示,收到国标平台侧的回传请求后,才打开摄像头,才开始编码打包,最大限度的减少资源的占用