开源图表库MPAndroidChart之饼状图和柱状图
2016-07-05 13:11
447 查看
MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活。MPAndroidChart同样拥有常用的图表类型:线型图、饼图、柱状图和散点图。
MPAndroidChartGitHub地址
各个版本mpandroidchartlibrary.jar包下载
1、导入 mpandroidchartlibrary-2-0-8.jar
2、定义XML文件
activity_main.xml
activity_main2.xml
3.主要Java逻辑代码如下
饼状图
MainActivity.java
柱状图
Main2Activity.java
4.效果图
![](http://img.blog.csdn.net/20160705130255500)
![](http://img.blog.csdn.net/20160705130346688)
5.存在问题
如下图:
![](http://img.blog.csdn.net/20160712160337243)
如果有哪位大神知道解决方案,请告知,不甚感谢。
MPAndroidChartGitHub地址
各个版本mpandroidchartlibrary.jar包下载
1、导入 mpandroidchartlibrary-2-0-8.jar
2、定义XML文件
activity_main.xml
<LinearLayout 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:orientation="vertical" tools:context=".MainActivity" > <com.github.mikephil.charting.charts.PieChart android:id="@+id/spread_pie_chart" android:layout_width="wrap_content" android:layout_height="320dp" android:layout_gravity="center_horizontal" /> <Button android:id="@+id/bt_to_bar_chart" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ToBarChart" android:layout_gravity="center_horizontal" /> </LinearLayout>
activity_main2.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=".Main2Activity" > <com.github.mikephil.charting.charts.BarChart android:id="@+id/spread_bar_chart" android:layout_width="wrap_content" android:layout_height="320dp" android:layout_gravity="center_horizontal" /> </RelativeLayout>
3.主要Java逻辑代码如下
饼状图
MainActivity.java
import java.util.ArrayList; import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.github.mikephil.charting.charts.PieChart; import com.github.mikephil.charting.components.Legend; import com.github.mikephil.charting.components.Legend.LegendPosition; 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.utils.ColorTemplate; import com.github.mikephil.charting.utils.PercentFormatter; public class MainActivity extends Activity { private PieChart mChart; private Button toBarChart; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toBarChart = (Button) findViewById(R.id.bt_to_bar_chart); toBarChart.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,Main2Activity.class); startActivity(intent); } }); mChart = (PieChart) findViewById(R.id.spread_pie_chart); PieData mPieData = getPieData(4, 100); showChart(mChart, mPieData); } private void showChart(PieChart pieChart, PieData pieData) { pieChart.setHoleColorTransparent(true); //pieChart.setHoleRadius(40f); // 半径 pieChart.setTransparentCircleRadius(0f); // 半透明圈 pieChart.setHoleRadius(0); //实心圆 pieChart.setDescription("测试饼状图"); // mChart.setDrawYValues(true); pieChart.setDrawCenterText(false); // 饼状图中间可以添加文字 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(false); // 可以手动旋转 // 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.setData(pieData); // undo all highlights // pieChart.highlightValues(null); // pieChart.invalidate(); Legend mLegend = pieChart.getLegend(); // 设置比例图 mLegend.setPosition(LegendPosition.RIGHT_OF_CHART_CENTER); // 最右边显示 // 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 = 100; float quarterly2 = 20; float quarterly3 = 66; float quarterly4 = 98; 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, ""/* 显示在比例图上 */); pieDataSet.setSliceSpace(2f); // 设置个饼状图之间的距离 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); pieDataSet.setColors(ColorTemplate.VORDIPLOM_COLORS); DisplayMetrics metrics = getResources().getDisplayMetrics(); float px = 5 * (metrics.densityDpi / 160f); pieDataSet.setSelectionShift(px); // 选中态多出的长度 PieData pieData = new PieData(xValues, pieDataSet); pieData.setValueFormatter(new PercentFormatter());//显示百分比 pieData.setValueTextSize(10f);//饼状图上字体大小 return pieData; } }
柱状图
Main2Activity.java
import java.util.ArrayList; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.components.Legend; import com.github.mikephil.charting.components.YAxis; import com.github.mikephil.charting.components.Legend.LegendForm; import com.github.mikephil.charting.components.Legend.LegendPosition; import com.github.mikephil.charting.components.XAxis; import com.github.mikephil.charting.components.XAxis.XAxisPosition; import com.github.mikephil.charting.components.YAxis.YAxisLabelPosition; 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 com.github.mikephil.charting.utils.ValueFormatter; public class Main2Activity extends Activity { private BarChart mBarChart; private BarData mBarData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); mBarChart = (BarChart) findViewById(R.id.spread_bar_chart); mBarData = getBarData(4, 100); showBarChart(mBarChart, mBarData); } private void showBarChart(BarChart barChart, BarData barData) { barChart.setDrawBorders(false); // //是否添加边框 barChart.setDescription("");// 数据描述 // 如果没有数据的时候,会显示这个,类似ListView的EmptyView barChart.setNoDataTextDescription("You need to provide data for the chart."); barChart.setDrawGridBackground(false); // 是否显示表格颜色 barChart.setGridBackgroundColor(Color.WHITE & 0x70FFFFFF); // 表格的的颜色,在这里是是给颜色设置一个透明度 barChart.setTouchEnabled(true); // 设置是否可以触摸 barChart.setDragEnabled(false);// 是否可以拖拽 barChart.setScaleEnabled(false);// 是否可以缩放 barChart.setPinchZoom(false);// // barChart.setBackgroundColor();// 设置背景 barChart.setDrawBarShadow(false); barChart.setData(barData); // 设置数据 Legend mLegend = barChart.getLegend(); // 设置比例图标示 mLegend.setForm(LegendForm.CIRCLE);// 样式 mLegend.setFormSize(6f);// 字体 mLegend.setTextColor(Color.BLACK);// 颜色 mLegend.setPosition(LegendPosition.BELOW_CHART_CENTER); // X轴设定 XAxis xAxis = barChart.getXAxis(); xAxis.setPosition(XAxisPosition.BOTTOM); YAxis leftAxis = barChart.getAxisLeft(); // leftAxis.setTypeface(mTf); // leftAxis.setLabelCount(8); // leftAxis.setValueFormatter(custom); leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART); YAxis rightAxis = barChart.getAxisRight(); rightAxis.setDrawGridLines(false); // rightAxis.setTypeface(mTf); // rightAxis.setLabelCount(8); // rightAxis.setValueFormatter(custom); rightAxis.setEnabled(false);//设置不可见 barChart.animateX(2500); // 立即执行的动画,x轴 } private BarData getBarData(int count, float range) { ArrayList<String> xValues = new ArrayList<String>(); for (int i = 0; i < count; i++) { xValues.add("第" + (i + 1) + "季度"); } ArrayList<BarEntry> yValues = new ArrayList<BarEntry>(); for (int i = 0; i < count; i++) { float value = (float) (Math.random() * range/* 100以内的随机数 */) + 3; yValues.add(new BarEntry(value, i)); } // y轴的数据集合 BarDataSet barDataSet = new BarDataSet(yValues, "测试饼状图"); // 单色 // barDataSet.setColor(Color.rgb(114, 188, 223)); // 多色 barDataSet.setColors(ColorTemplate.VORDIPLOM_COLORS); ArrayList<BarDataSet> barDataSets = new ArrayList<BarDataSet>(); barDataSets.add(barDataSet); // add the datasets BarData barData = new BarData(xValues, barDataSets); // barData.setValueTypeface(mTf); return barData; } }
4.效果图
5.存在问题
如下图:
如果有哪位大神知道解决方案,请告知,不甚感谢。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories