public void initChart(LineChart chart,int bgGridColor,int textColor,boolean showXAxis,boolean setMinZero,boolean showY) {
if (bgGridColor == 0)
bgGridColor = Color.parseColor("#50ffffff");
if (textColor == 0)
textColor = Color.parseColor("#ffffff");
chart.setDrawGridBackground(false);//是否绘制网格背景颜色
chart.getDescription().setEnabled(false);
chart.setDrawBorders(false);//是否在折线图上添加边框
chart.getAxisRight().setEnabled(false); // 右边的坐标轴
chart.getXAxis().setEnabled(showXAxis);
if (showY) {
chart.setViewPortOffsets(10f, 10f, 10f, 10f);
} else {
// 点击图标上圆点显示mark
// MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view,textColor);
// mv.setOffset();
// mv.setChartView(chart); // For bounds control
// chart.setMarker(mv);
chart.setViewPortOffsets(45f, 20f, 45f, 4f);
// chart.setBackgroundColor(color);//设置背景色
chart.setTouchEnabled(true);
chart.setDragEnabled(true);
//现在chart的缩放问题主要在这里,如果只设置scaleenable=true,只有在全屏显示所有点集合时才能进行x y分别缩放,如果在后面设置了
// X Y的rang显示范围时。则只能进行Y轴的缩放,只有这样分别设置,才能在设置显示点数限制时进行分别x y手指缩放
chart.setScaleYEnabled(true);
chart.setScaleXEnabled(true);
chart.setScaleEnabled(true);
chart.setPinchZoom(false);
chart.setDragDecelerationFrictionCoef(0.5f);
chart.setNoDataText(resource.getString(R.string.pmDataIsNull));
chart.setNoDataTextColor(textColor);
chart.setNoDataTextTypeface(Typeface.DEFAULT_BOLD);
XAxis xAxis = chart.getXAxis();
xAxis.setEnabled(true);
xAxis.setDrawLabels(true);
if (showY)
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE);//设置x轴在下方
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
//画限制线条
// LimitLine xLimit = new LimitLine(10f,"");
//画虚线
xAxis.enableGridDashedLine(10f, 10f, 0.2f);
xAxis.setCenterAxisLabels(true);
xAxis.setDrawGridLines(true);//是否绘制x轴网格
xAxis.setDrawAxisLine(false);//是否绘制x轴
xAxis.setTextColor(textColor);
xAxis.setTextSize(10);
xAxis.setYOffset(-0.5f);
xAxis.setXOffset(-10f);
xAxis.setGridColor(bgGridColor);
xAxis.setGranularity(1f);
xAxis.setAvoidFirstLastClipping(true);
YAxis yAxis = chart.getAxisLeft();
yAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
if (value<0){
return "";
return String.valueOf((int)value);
yAxis.setEnabled(true);
yAxis.setDrawLabels(true);
//设置最小值为零
if (setMinZero)
yAxis.setAxisMinimum(0);
if (showY) {
yAxis.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
yAxis.setXOffset(5f);
} else {
yAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
yAxis.setXOffset(30f);
xAxis.enableGridDashedLine(10f, 5f, 0.2f);
yAxis.setCenterAxisLabels(true);
yAxis.setDrawGridLines(true);//是否绘制横向轴网格
yAxis.setDrawAxisLine(false);//是否绘制x轴
yAxis.setTextColor(textColor);
yAxis.setTextSize(12);
yAxis.setYOffset(-8f);
yAxis.setGridColor(bgGridColor);
//显示曲线的描述
Legend mLegend = chart.getLegend();
mLegend.setEnabled(false);
//显示图例
// if (showY) {
// mLegend.setEnabled(false);
// }else {
// mLegend.setEnabled(true);
// mLegend.setXOffset(100);
// mLegend.setTextSize(10);
// mLegend.setTextColor(textColor);
// mLegend.setYOffset(0);
// mLegend.setXEntrySpace(10);
// mLegend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
// mLegend.setForm(Legend.LegendForm.CIRCLE);//图例样式 (CIRCLE圆形;LINE线性;SQUARE是方块)
// }
该方法一般放在baseActivity里面,方便继承类好调用
这是设置数据的例子,仅供参考
private void refreshChart(byte[] bytes) {
ArrayList<Entry> values = new ArrayList<>();
int sumForm = 0;
for (int i = 0; i < bytes.length; i += 2) {
byte[] data = new byte[]{bytes[i], bytes[i + 1]};
int i1 = HexUtil.bytes2IntLittle(data)*3;
values.add(new Entry(i, i1));
sumForm = i1;
fogTv.setText(String.valueOf(sumForm));
LineDataSet set;
if (chart.getData()!=null && chart.getData().getDataSetCount()>0){
set = (LineDataSet) chart.getData().getDataSetByIndex(0);
set.setValues(values);
chart.getData().notifyDataChanged();
chart.notifyDataSetChanged();
} else {
int i = resource.getColor(R.color.main_color);
set = new CustomLineData(values, "DataSet 1");
set.setColor(i);
set.setDrawValues(true);
set.setValueTextColor(i);
set.setDrawCircles(true);
set.setCircleColor(i);
set.setMode(LineDataSet.Mode.CUBIC_BEZIER);//这是点的形状圆形
set.setDrawFilled(true);
set.setFillAlpha(150);
ArrayList<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(set);
LineData data = new LineData(dataSets);
chart.setData(data);
chart.animateXY(1500,1500);
chart.invalidate();
chart.setVisibleXRange(0,12);//设置x轴显示范围,如果不设置会一次加载所有的点,很难看
chart.setDragDecelerationFrictionCoef(0.9f);//设置滑动的阻力
1. 设置轴的最小值:setAxisMinimum(float min):为此轴的条目设置一个最小值。2. 设置轴的最大值:setAxisMaximum(float max):为此轴的条目设置一个最大值。entries.add(BarEntry(0f, 30f)) // x=0 y=30 代表一个点。entries.add(BarEntry(1f, 80f)) // x=1 y=80 代表一个点。
本文讲述对MPAndroidChart的使用,大部分是从其文档中摘录过来的。版本3.0.2一、MPAndroidChart概述MPAndroidChart 是一款专门用于Android绘制图表的库,相当强大,当然也有IOS的版本。GitHub上地址:Git-MPAndroidChart 。
其特点如下:
支持8中不同图表类型
支持轴上的缩放
可拖动、平移
可突出选中的值(瞄准点及弹出po
Description description = new Description();//描述
description.setEnabled(false);//取消描述
lineChart.setDescription(description);//设置图表描述
lineChart.setPinchZoom(false);//缩放
lineChart.setDoubleTapToZoomEnabled(false);//双击缩放
lineChart.setScaleEnabled(true);//缩放
Android 平台绘图的开源库有好几个,最成熟最出名的就属于 MPAndroidChart 了,他能帮我们实现曲线图、折线图、柱状图、饼状图,分布图等等。同时还可以实现混合图表。
float ratio = 1f;
if (dataXList.size() >= 6) {
ratio = (float) dataXList.size() / (float) 6;
lineChart.moveViewToX(da...
用这个方法设置后一页固定显示7个并且按比率放大
//设置一页最大显示个数为7,超出部分就滑动
float ratio = (float) bodyFatScaleDatasList.size()/(float) 7;
//显示的时候是按照多大的比率缩放显示,1f表示不放大缩小
mLineChart.zoom(ratio,1f,0,0);
跳转到最后一个位置
mLineChart.moveViewToX(lastIndex);
出现x轴第一
新接手的项目中用到了MPAndroidChart,有一个BUG,X轴显示的标签(X轴的粒度为5分钟)不是想要的形式,如下图:将xAxis.setLabelCount(7);替换为xAxis.setLabelCount(7,true);解决,如下图:第2个重载方法的第二个参数是指强制绘制指定个数的标签,但是可能会造成绘制出现偏差,然后果然出现了,将图表放大出标签和图表对应不上:采用给linechar...
本篇主要是LineChart实战相关知识和简单的源码剖析,相关源码没有,自己动手实践学习才是最有效的方法。LineChart Simple运行效果图个人感官觉得某些属性设置后太难看了并没有添加,so效果图上没有显示,如果你想测试这些属性自行参考下面的api介绍一些调用方法说明设置图标数据内容视图的背景颜色(默认RGB(240,240,240))mChart.setDrawGridBackground
我正在使用MPAndroidChart,当有很多条目(我的设备上超过30个)时,图表似乎有一个自动缩放,因为X轴在开始时只显示偶数值 .然后,当在图表上(在屏幕上或通过代码 chart.zoom(2, 0, 0, 0) )进行缩放时,将显示x轴上的所有值 .由于导致自动缩放的条目数似乎取决于设备屏幕大小(因此以编程方式进行缩放似乎不是一个好选项),有没有办法强制图表不进行此缩放?我已经尝试了 ch...
ValueFormatter xAxisFormatter = new ValueFormatter() {
@Override
public String getFormattedValue(float value) {
if (value &amp;amp;lt; 0 ||...
今天来记录一下LineChart(折线图)的详细使用(美化)!
注:本人使用的版本是MPAndroidChart-v3.0.3(如若版本不同有某些方法更新,可在评论区留言,尽我所能帮你解决!)
上一篇文章讲了折线图的简单使用,这篇文章就来讲进阶使用(美化)
MPAndroidChart的详细使用——LineChart折线图(一)(简单使用)
MPAndroidChart的详细使用——BarChart条形图(一)(简单使用)
MPAndroidChart的详细使用——BarChart条形图(二)(详细美化)
MPAndroidChart的详细使用——BarChart条形图组(三)(条形图组)
这个ViewPortHandler类负责处理图表的视图端口。这意味着它负责图表视图中可见的内容,它在平移和缩放级别、图表的大小以及绘图区域和当前偏移量方面都是当前状态。这个ViewPortHandler允许直接访问上述所有属性并修改它们。
上一篇:MPAndroidChart的详细使用——DataSet类以及DataSet子类
下一篇:MPAndroidChart的详细使用——FillFormat接口
建议:这方面的设置最好是有一定水平且熟悉API的人来进行操作,否则可能会出现很多意外错误。
ViewPortHandler handler = chart.getViewPortHan
最近做了几个项目都需要用到数据的统计与分析 , 所有这几天就学习了一下MPAndroidChart , 把整理的一些知识点都分享一下, 以供大家参考.一 . MPAndroidChart 包含哪些图表 ?1. 折线图 LineChart2. 条形图 BarChart3. 条形折线图 Combined-Chart4. 圆饼图 PieChart5. 雷达图 ScatterChart6. K线图 Can...