Android之玩转MPAndroidChart让(折线图、柱形图、饼状图、散列图、雷达图)优雅的舞动
来源:互联网 发布:xf adobecc2015 mac 编辑:程序博客网 时间:2024/05/20 04:30
Android之玩转MPAndroidChart让(折线图、柱形图、饼状图、散列图、雷达图)优雅的舞动
2015年11月30日 ⁄ Android开发经验 ⁄ 共 21354字 ⁄ 字号 小 中 大 ⁄ 评论关闭
第一步:不废话,先爆照
我的github地址:https://github.com/changechenyu/MPAndroidChartTest
第二步:介绍MPAndroidChart适用场景并把它的库文件导入我们开发的项目
介绍:
MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活。MPAndroidChart同样拥有常用的图表类型:线型图、饼图、柱状图和散点图和雷达图。
github地址:https://github.com/PhilJay/MPAndroidChart
适用场景:
如果您的应用涉及大量数据,利用图表,用表显示的数据可能会得到一个好得多的用户体验
把MPAndroidChart导入我们的项目:
方法一:
我是先用git clone下来,然后把项目的MPChartLib改名为mplib导入我们的项目新建的lib文件夹,然后配置项目里面的gradle 、settings.gradle和我们项目同步。
github地址:https://github.com/PhilJay/MPAndroidChart,图片如下
方法二:
复制mpandroidchartlibrary-1-7-4.jar到项目的库目录,下载地址:https://github.com/PhilJay/MPAndroidChart/releases
在Android的Studio中,右键单击该JAR文件,然后选择 add as library。
在Android的Studio中,右键单击该JAR文件,然后选择 add as library。
第三步:现实柱形图
我先把项目的结构爆出来,让大家有个心里面有个底
这是menu_main.xml文件
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context=".DemoActivity" > <item android:id="@+id/BarChart" android:title="BarChart" android:orderInCategory="100" app:showAsAction="never" /> <item android:id="@+id/LineChart" android:title="LineChart" android:orderInCategory="100"></item> <item android:id="@+id/PieChart" android:title="PieChart" android:orderInCategory="100"></item> <item android:id="@+id/ScatterChart" android:title="ScatterChart" android:orderInCategory="100" app:showAsAction="never" /> <item android:id="@+id/RadarChart" android:title="RadarChart" android:orderInCategory="100" app:showAsAction="never" /></menu>
activity_main.xml文件如下
<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=".MainActivity" > <RelativeLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="fill_parent" /></RelativeLayout>
这是MainActivity.java文件
package com.example.chenyu.mpandroidcharttest;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.ViewConfiguration;import java.lang.reflect.Field;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fm = getFragmentManager(); // 开启Fragment事务 FragmentTransaction transaction = fm.beginTransaction(); BarCharFragment barCharFragment = new BarCharFragment(); transaction.replace(R.id.content, barCharFragment); transaction.commit(); //显示右上角的3个点 makeActionOverflowMenuShown(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { FragmentManager fm = getFragmentManager(); // 开启Fragment事务 FragmentTransaction transaction = fm.beginTransaction(); int id = item.getItemId(); switch (id) { case R.id.BarChart: BarCharFragment barCharFragment = new BarCharFragment(); transaction.replace(R.id.content, barCharFragment); transaction.commit(); return true; case R.id.LineChart: LineCharFragment lineCharFragment = new LineCharFragment(); transaction.replace(R.id.content, lineCharFragment); transaction.commit(); return true; case R.id.RadarChart: RadarCharFragment radarCharFragment = new RadarCharFragment(); transaction.replace(R.id.content, radarCharFragment); transaction.commit(); return true; case R.id.PieChart: PieCharFragment pieCharFragment = new PieCharFragment(); transaction.replace(R.id.content, pieCharFragment); transaction.commit(); return true; case R.id.ScatterChart: ScatterChartFragment scatterChartFragment = new ScatterChartFragment(); transaction.replace(R.id.content, scatterChartFragment); transaction.commit(); return true; } return super.onOptionsItemSelected(item); } private void makeActionOverflowMenuShown() { //devices with hardware menu button (e.g. Samsung Note) don't show action overflow menu try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if (menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { } }}
我的手机是小米2s,如果不加上makeActionOverflowMenuShow()方法右上角的那3个点现实不出来
然后是BarCharFragment.java文件
package com.example.chenyu.mpandroidcharttest;import android.app.Fragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.github.mikephil.charting.charts.BarChart;import com.github.mikephil.charting.components.LimitLine;import com.github.mikephil.charting.data.BarData;import com.github.mikephil.charting.data.BarDataSet;import com.github.mikephil.charting.data.BarEntry;import com.github.mikephil.charting.utils.ColorTemplate;import java.util.ArrayList;/** * Created by Think on 2015/11/29. */public class BarCharFragment extends Fragment { public BarChart barChart; public ArrayList<BarEntry> entries = new ArrayList<BarEntry>(); public BarDataSet dataset; public ArrayList<String> labels = new ArrayList<String>(); @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.bar_chart, container, false); barChart = (BarChart) view.findViewById(R.id.bar_chart); initEntriesData(); initLableData(); show(); return view; } public void initEntriesData() { entries.add(new BarEntry(4f, 0)); entries.add(new BarEntry(8f, 1)); entries.add(new BarEntry(6f, 2)); entries.add(new BarEntry(12f, 3)); entries.add(new BarEntry(18f, 4)); entries.add(new BarEntry(9f, 5)); } public void initLableData() { labels.add("一月"); labels.add("二月"); labels.add("三月"); labels.add("四月"); labels.add("五月"); labels.add("六月"); } public void show() { dataset = new BarDataSet(entries, "# of Calls"); dataset.setColors(ColorTemplate.COLORFUL_COLORS); BarData data = new BarData(labels, dataset); LimitLine line = new LimitLine(10f); barChart.setData(data);// chart.animateXY(5000,5000);// chart.animateX(5000); barChart.animateY(2000); barChart.setDescription("hello MPandroidChart"); }}
代码解说:
所有数据应该转换成一个数据集 对象之前它可用于由一个图表。不同类型的图表中使用不同的子类 的DataSet 类。例如,一个BARCHART使用BarDataSet 实例。同样,饼图使用PieDataSet 实例。
我们定义X的标签:
ArrayList<String> labels = new ArrayList<String>();labels.add("January"); labels.add("February"); labels.add("March"); labels.add("April"); labels.add("May");labels.add("June");
我们定义Y的标签:
也就是我们Y值,上面知道X有6个值了,然后需要对应的Y值,我们需要创建BarEntry(y,x)对象,这里面的y对应y的值,然后x对应我么的下标
然后把这些BarEntry放入ArrayList集合里面,就像一个键值对一样,
public void initEntriesData() { entries.add(new BarEntry(4f, 0)); entries.add(new BarEntry(8f, 1)); entries.add(new BarEntry(6f, 2)); entries.add(new BarEntry(12f, 3)); entries.add(new BarEntry(18f, 4)); entries.add(new BarEntry(9f, 5)); }
创建我们的图表:
首先我们需要BarChart里面要有数据吧,实现下面二行代码
BarData data = new BarData(labels, dataset);chart.setData(data);
为图表添加描述
barChart.setDescription("hello MPandroidChart");
添加颜色
默认是天蓝色的,但是我们可以修改树状图的颜色
下面的颜色只要选一个就行,你感兴趣就一个一个试一下
ColorTemplate.LIBERTY_COLORSColorTemplate.COLORFUL_COLORSColorTemplate.JOYFUL_COLORSColorTemplate.PASTEL_COLORSColorTemplate.VORDIPLOM_COLORS
记得加上下面的代码,不然没有颜色,我是用的ColorTemplate.COLORFUL_COLORS,so cool
dataset.setColors(ColorTemplate.COLORFUL_COLORS);
当然还有添加动画
// chart.animateXY(5000,5000);// chart.animateX(5000); barChart.animateY(2000);
至于每个是什么效果,你自己可以亲测下
当然你还可以保存图片
MPAndroidChart,您还可以在图表的当前状态保存为图像。要使用此功能,你首先需要给你的应用程序写入到设备的SD卡的权限。您可以通过添加如下代码到你做到这一点的AndroidManifest.xml:
1
< 使用-权限 的Android:名称=“android.permission.WRITE_EXTERNAL_STORAGE”/>
有两种方法可供选择:
saveToGallery 此方法保存您的图表为JPEG文件。它也可以让你指定的质量或图像的压缩比。
saveToPath 此方法保存您的图表为PNG文件的路径指定。
例如,你的图表保存为JPEG文件,可以使用下面的代码片段:
1
chart.saveToGallery(“mychart.jpg”,85); // 85是图像的质量
1
< 使用-权限 的Android:名称=“android.permission.WRITE_EXTERNAL_STORAGE”/>
有两种方法可供选择:
saveToGallery 此方法保存您的图表为JPEG文件。它也可以让你指定的质量或图像的压缩比。
saveToPath 此方法保存您的图表为PNG文件的路径指定。
例如,你的图表保存为JPEG文件,可以使用下面的代码片段:
1
chart.saveToGallery(“mychart.jpg”,85); // 85是图像的质量
然后爆效果图
第四步:实现折线图
liner_chart.xml文件如下
<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" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <com.github.mikephil.charting.charts.LineChart android:id="@+id/spread_line_chart" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_gravity="center_horizontal" /></RelativeLayout>
LineCharFragment.java文件
package com.example.chenyu.mpandroidcharttest;import android.app.Fragment;import android.graphics.Color;import android.os.Bundle;import android.support.annotation.Nullable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.github.mikephil.charting.charts.LineChart;import com.github.mikephil.charting.components.Legend;import com.github.mikephil.charting.data.Entry;import com.github.mikephil.charting.data.LineData;import com.github.mikephil.charting.data.LineDataSet;import java.util.ArrayList;/** * Created by Think on 2015/11/29. */public class LineCharFragment extends Fragment { public LineChart lineChart; public ArrayList<String> x = new ArrayList<String>(); public ArrayList<Entry> y = new ArrayList<Entry>(); public ArrayList<LineDataSet> lineDataSets = new ArrayList<LineDataSet>(); public LineData lineData = null; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.liner_chart, container, false); lineChart = (LineChart) view.findViewById(R.id.spread_line_chart); LineData resultLineData = getLineData(40, 100); showChart(); return view; } /** * gv * 初始化数据 * count 表示坐标点个数,range表示等下y值生成的范围 */ public LineData getLineData(int count, float range) { for (int i = 0; i < count; i++) { //X轴显示的数据 x.add(i + ""); } for (int i = 0; i < count; i++) {//y轴的数据 float result = (float) (Math.random() * range) + 3; y.add(new Entry(result, i)); } LineDataSet lineDataSet = new LineDataSet(y, "折线图");//y轴数据集合 lineDataSet.setLineWidth(1f);//线宽 lineDataSet.setCircleSize(2f);//现实圆形大小 lineDataSet.setColor(Color.RED);//现实颜色 lineDataSet.setCircleSize(Color.BLUE);//圆形颜色 lineDataSet.setHighLightColor(Color.WHITE);//高度线的颜色 lineDataSets.add(lineDataSet); lineData = new LineData(x, lineDataSets); return lineData; } /** * 设置样式 */ public void showChart() { lineChart.setDrawBorders(false);//是否添加边框 lineChart.setDescription("有风险的数据");//数据描述 lineChart.setNoDataTextDescription("我需要数据");//没数据显示 lineChart.setDrawGridBackground(true);//是否显示表格颜色 lineChart.setBackgroundColor(Color.YELLOW);//背景颜色 lineChart.setData(lineData);//设置数据 Legend legend = lineChart.getLegend();//设置比例图片标示,就是那一组Y的value legend.setForm(Legend.LegendForm.CIRCLE);//样式 legend.setFormSize(6f);//字体 legend.setTextColor(Color.WHITE);//设置颜色 lineChart.animateX(2000);//X轴的动画 }}
更具树状图的解说,这个可以对比参照,而且我基本上每行代码都有注释,大家应该可以看懂
效果图如下
第五步:实现饼状图
pie_chart.xml文件如下
<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" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <com.github.mikephil.charting.charts.PieChart android:id="@+id/pie_chart" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_gravity="center_horizontal" /></RelativeLayout>
PieCharFragment.java文件如下
package com.example.chenyu.mpandroidcharttest;import android.app.Fragment;import android.graphics.Color;import android.os.Bundle;import android.support.annotation.Nullable;import android.util.DisplayMetrics;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.github.mikephil.charting.charts.PieChart;import com.github.mikephil.charting.components.Legend;import com.github.mikephil.charting.data.Entry;import com.github.mikephil.charting.data.PieData;import com.github.mikephil.charting.data.PieDataSet;import java.util.ArrayList;/** * Created by Think on 2015/11/29. */public class PieCharFragment extends Fragment { public PieChart mChart; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.pie_chart, container, false); mChart = (PieChart) view.findViewById(R.id.pie_chart); PieData mPieData = getPieData(4, 100); showChart(mChart, mPieData); return view; } private void showChart(PieChart pieChart, PieData pieData) { pieChart.setHoleColorTransparent(true); pieChart.setHoleRadius(60f); //半径 pieChart.setTransparentCircleRadius(64f); // 半透明圈 //pieChart.setHoleRadius(0) //实心圆 pieChart.setDescription("测试饼状图"); // mChart.setDrawYValues(true); pieChart.setDrawCenterText(true); //饼状图中间可以添加文字 pieChart.setDrawHoleEnabled(true); pieChart.setRotationAngle(90); // 初始旋转角度 // draws the corresponding description value into the slice // mChart.setDrawXValues(true); // enable rotation of the chart by touch pieChart.setRotationEnabled(true); // 可以手动旋转 // display percentage values pieChart.setUsePercentValues(true); //显示成百分比 // mChart.setUnit(" €"); // mChart.setDrawUnitsInChart(true); // add a selection listener// mChart.setOnChartValueSelectedListener(this); // mChart.setTouchEnabled(false);// mChart.setOnAnimationListener(this); pieChart.setCenterText("Quarterly Revenue"); //饼状图中间的文字// pieChart.animateY(3000); //设置数据 pieChart.setData(pieData); // undo all highlights// pieChart.highlightValues(null);// pieChart.invalidate(); Legend mLegend = pieChart.getLegend(); //设置比例图 mLegend.setPosition(Legend.LegendPosition.RIGHT_OF_CHART); //最右边显示// mLegend.setForm(LegendForm.LINE); //设置比例图的形状,默认是方形 mLegend.setXEntrySpace(7f); mLegend.setYEntrySpace(5f); pieChart.animateXY(1000, 1000); //设置动画 // mChart.spin(2000, 0, 360); } /** * @param count 分成几部分 * @param range */ private PieData getPieData(int count, float range) { ArrayList<String> xValues = new ArrayList<String>(); //xVals用来表示每个饼块上的内容 for (int i = 0; i < count; i++) { xValues.add("Quarterly" + (i + 1)); //饼块上显示成Quarterly1, Quarterly2, Quarterly3, Quarterly4 } ArrayList<Entry> yValues = new ArrayList<Entry>(); //yVals用来表示封装每个饼块的实际数据 // 饼图数据 /** * 将一个饼形图分成四部分, 四部分的数值比例为14:14:34:38 * 所以 14代表的百分比就是14% */ float quarterly1 = 14; float quarterly2 = 14; float quarterly3 = 34; float quarterly4 = 38; yValues.add(new Entry(quarterly1, 0)); yValues.add(new Entry(quarterly2, 1)); yValues.add(new Entry(quarterly3, 2)); yValues.add(new Entry(quarterly4, 3)); //y轴的集合 PieDataSet pieDataSet = new PieDataSet(yValues, "Quarterly Revenue 2014"/*显示在比例图上*/); pieDataSet.setSliceSpace(0f); //设置个饼状图之间的距离 ArrayList<Integer> colors = new ArrayList<Integer>(); // 饼图颜色 colors.add(Color.rgb(205, 205, 205)); colors.add(Color.rgb(114, 188, 223)); colors.add(Color.rgb(255, 123, 124)); colors.add(Color.rgb(57, 135, 200)); pieDataSet.setColors(colors); DisplayMetrics metrics = getResources().getDisplayMetrics(); float px = 5 * (metrics.densityDpi / 160f); pieDataSet.setSelectionShift(px); // 选中态多出的长度 PieData pieData = new PieData(xValues, pieDataSet); return pieData; }}
效果图如下
第六步:实现散列图
scatter_chart.xml文件如下
<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" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <com.github.mikephil.charting.charts.ScatterChart android:id="@+id/scatter_chart" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_gravity="center_horizontal" /></RelativeLayout>
ScatterChartFragment.java文件如下
package com.example.chenyu.mpandroidcharttest;import android.app.Fragment;import android.graphics.Color;import android.os.Bundle;import android.support.annotation.Nullable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.github.mikephil.charting.charts.BarChart;import com.github.mikephil.charting.charts.ScatterChart;import com.github.mikephil.charting.components.Legend;import com.github.mikephil.charting.components.LimitLine;import com.github.mikephil.charting.data.BarData;import com.github.mikephil.charting.data.BarDataSet;import com.github.mikephil.charting.data.BarEntry;import com.github.mikephil.charting.data.Entry;import com.github.mikephil.charting.data.LineData;import com.github.mikephil.charting.data.LineDataSet;import com.github.mikephil.charting.data.ScatterData;import com.github.mikephil.charting.data.ScatterDataSet;import com.github.mikephil.charting.utils.ColorTemplate;import java.util.ArrayList;/** * Created by Think on 2015/11/29. */public class ScatterChartFragment extends Fragment { public ScatterChart scatterChart; public ArrayList<String> x = new ArrayList<String>(); public ArrayList<Entry> y = new ArrayList<Entry>(); public ArrayList<ScatterDataSet> scatterDataSets = new ArrayList<ScatterDataSet>(); public ScatterData scatterData = null; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.scatter_chart, container, false); scatterChart = (ScatterChart) view.findViewById(R.id.scatter_chart); ScatterData resultScatterData = getRadarData(40, 100); showChart(); return view; } /** * gv * 初始化数据 * count 表示坐标点个数,range表示等下y值生成的范围 */ public ScatterData getRadarData(int count, float range) { for (int i = 0; i < count; i++) { //X轴显示的数据 x.add(i + ""); } for (int i = 0; i < count; i++) {//y轴的数据 float result = (float) (Math.random() * range) + 3; y.add(new Entry(result, i)); } ScatterDataSet scatterDataSet = new ScatterDataSet(y, "散状图");//y轴数据集合 scatterDataSet.setColor(Color.RED);//现实颜色 scatterDataSet.setScatterShapeSize(6f); scatterDataSet.setDrawValues(true); scatterDataSet.setHighLightColor(Color.WHITE);//高度线的颜色 scatterDataSets.add(scatterDataSet); scatterData = new ScatterData(x, scatterDataSets); return scatterData; } /** * 设置样式 */ public void showChart() { scatterChart.setDrawBorders(false);//是否添加边框 scatterChart.setDescription("有风险的数据");//数据描述 scatterChart.setNoDataTextDescription("我需要数据");//没数据显示 scatterChart.setDrawGridBackground(true);//是否显示表格颜色 scatterChart.setBackgroundColor(Color.YELLOW);//背景颜色 scatterChart.setData(scatterData);//设置数据 Legend legend = scatterChart.getLegend();//设置比例图片标示,就是那一组Y的value legend.setForm(Legend.LegendForm.CIRCLE);//样式 legend.setFormSize(6f);//字体 legend.setTextColor(Color.WHITE);//设置颜色 scatterChart.animateX(2000);//X轴的动画 }}
效果图如下
第七步:实现雷达图
radar_chart.xml文件如下
<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" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <com.github.mikephil.charting.charts.RadarChart android:id="@+id/radar_chart" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_gravity="center_horizontal" /></RelativeLayout>
RadarCharFragment.java文件如下
package com.example.chenyu.mpandroidcharttest;import android.app.Fragment;import android.graphics.Color;import android.os.Bundle;import android.support.annotation.Nullable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.github.mikephil.charting.charts.LineChart;import com.github.mikephil.charting.charts.RadarChart;import com.github.mikephil.charting.components.Legend;import com.github.mikephil.charting.data.Entry;import com.github.mikephil.charting.data.LineData;import com.github.mikephil.charting.data.LineDataSet;import com.github.mikephil.charting.data.RadarData;import com.github.mikephil.charting.data.RadarDataSet;import java.util.ArrayList;/** * Created by Think on 2015/11/29. */public class RadarCharFragment extends Fragment { public RadarChart radarChart; public ArrayList<String> x = new ArrayList<String>(); public ArrayList<Entry> y = new ArrayList<Entry>(); public ArrayList<RadarDataSet> radarDataSets = new ArrayList<RadarDataSet>(); public RadarData radarData = null; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.radar_chart, container, false); radarChart = (RadarChart) view.findViewById(R.id.radar_chart); RadarData resultLineData = getRadarData(40, 100); showChart(); return view; } /** * gv * 初始化数据 * count 表示坐标点个数,range表示等下y值生成的范围 */ public RadarData getRadarData(int count, float range) { for (int i = 0; i < count; i++) { //X轴显示的数据 x.add(i + ""); } for (int i = 0; i < count; i++) {//y轴的数据 float result = (float) (Math.random() * range) + 3; y.add(new Entry(result, i)); } RadarDataSet radarDataSet = new RadarDataSet(y, "雷达图");//y轴数据集合 radarDataSet.setLineWidth(1f);//线宽 radarDataSet.setColor(Color.RED);//现实颜色 radarDataSet.setHighLightColor(Color.WHITE);//高度线的颜色 radarDataSets.add(radarDataSet); radarData = new RadarData(x, radarDataSets); return radarData; } /** * 设置样式 */ public void showChart() {// radarChart.setDrawBorders(false);//是否添加边框 radarChart.setDescription("有风险的数据");//数据描述 radarChart.setNoDataTextDescription("我需要数据");//没数据显示// radarChart.setDrawGridBackground(true);//是否显示表格颜色 radarChart.setBackgroundColor(Color.YELLOW);//背景颜色 radarChart.setData(radarData);//设置数据 Legend legend = radarChart.getLegend();//设置比例图片标示,就是那一组Y的value legend.setForm(Legend.LegendForm.CIRCLE);//样式 legend.setFormSize(6f);//字体 legend.setTextColor(Color.WHITE);//设置颜色 radarChart.animateY(2000);//X轴的动画 }}
效果图:
第八步:总结
1、 开源项目导入库的练习,我以前没有出过错,这次除了点错误,原来是我忘记了 compile project(':mplib')添加,导致项目可以导入包,但是还是会编译通不过,下次要记得添加上去。
2、对于项目那个右上角的那3个点的菜单终于有反应了,之前老是显示不出来,心里舒服了点。
3、把这个小练习从android studio上传到github上面遇到一些问题,然后自己解决了。
4、对MPAndroidChart有了一定的认识,然后把它们之间的各种Chart对比学习,只要把一个搞懂了其它的差不多,以后我们要是有类似的开源项目,可以对比学习。
源码下载:猛搓这里
好了,快2点了,可以回去睡觉了,如果你觉得这篇博客你以后的项目可能会用得到,或者让你学到了新知识,或者给你的眼睛带来一点点视觉冲击,或者被我感染了,
就start我呗。
github地址:https://github.com/changechenyu/MPAndroidChartTest
2 0
- Android之玩转MPAndroidChart让(折线图、柱形图、饼状图、散列图、雷达图)优雅的舞动
- Android之玩转MPAndroidChart让(折线图、柱形图、饼状图、散列图、雷达图)优雅的舞动
- android 折线图之二MPAndroidChart
- MPAndroidChart之折线图的使用
- Android图表 MPAndroidChart折线图
- Android图表 MPAndroidChart折线图
- MPAndroidChart之雷达图学习笔记
- MPAndroidChart实现的折线图
- Android MPAndroidChart 直方图,曲线这,折线图的运用。
- Android之MPAndroidChart库使用说明(柱状图、折线图、饼图和组合图.)
- MPAndroidChart开源图表库(二)之折线图
- 安卓报表MPAndroidChart之折线图
- MPAndroidChart使用二之折线图
- MPAndroidChart图表库之折线图
- Android数据统计柱状图、折线图 MPAndroidChart
- MPAndroidChart 折线图
- MPAndroidChart折线图一
- MPAndroidChart折线图二
- Python脚本运行出现语法错误
- ORA-01704: 文字字符串过长
- 10032---HttpClient访问,需要用户名密码时
- MalformedByteSequenceException:3 字节的 UTF-8 序列的字节 3 无效。
- 《机器学习实战》Logisic回归算法(2)之从疝气病症预测病马的死亡率
- Android之玩转MPAndroidChart让(折线图、柱形图、饼状图、散列图、雷达图)优雅的舞动
- 堆和堆排序
- JQuery语法、选择器、事件器
- 除了布局,android中xml的其他用法
- ibatis整理
- VR 第六篇 HTC Vive Lighthouse
- loadrunner 关于附件上传的应用
- 运行时简单运用(3.2)
- 基于Virtext6平台的GTX IP核基本设置说明