Android图表控件MPAndroidChart(折线图、柱状图)

一、效果

实现效果:x轴间距固定不变,y轴不显示,手指向前滑动实现多条数据的展示,双击不放大,大小固定,屏幕最多展示7个点。
问题:次代码若将y轴显示,x轴会出问题


e9dd8d4736bd6ed8df3904778c750d6.jpg

二、步骤

1.添加依赖

在project的build.gradle中引入

repositories {
      maven { url 'https://jitpack.io' }
}

在app的build.gradle中引入

dependencies {
    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}

2.调用页布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/cl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent">
     <RadioGroup
            android:id="@+id/rg_selector"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:orientation="horizontal"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <RadioButton
                android:id="@+id/rb_one"
                android:layout_width="68dp"
                android:layout_height="30dp"
                android:layout_marginLeft="13dp"
                android:background="#999333"
                android:button="@null"
                android:checked="true"
                android:gravity="center"
                android:text="近7天"
                android:textColor="#343434"
                android:textSize="12sp" />

            <RadioButton
                android:id="@+id/rb_two"
                android:layout_width="68dp"
                android:layout_height="30dp"
                android:layout_marginLeft="10dp"
                android:background="#555999"
                android:button="@null"
                android:gravity="center"
                android:text="近30天"
                android:textColor="#343434"
                android:textSize="12sp" />
      </RadioGroup>

        <com.github.mikephil.charting.charts.LineChart
            android:id="@+id/line"
            android:layout_width="315dp"
            android:layout_height="148dp"
            android:layout_marginTop="16dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/rg_selector" />

        <com.github.mikephil.charting.charts.BarChart
            android:id="@+id/barChart"
            android:layout_width="315dp"
            android:layout_height="148dp"
            android:layout_marginTop="26dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/line" />

   </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

三、折线图

1.封装类

import android.graphics.Color;
import android.graphics.Matrix;

import com.github.mikephil.charting.charts.Chart;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
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.formatter.ValueFormatter;

import java.text.DecimalFormat;
import java.util.List;

/**
 * 折线图表
 */
public class LineChartUtils {

    /**
     * 初始化图表
     *
     * @param chart 原始图表
     * @return 初始化后的图表
     */
    public static LineChart initChart(LineChart chart, boolean isXEnbale, boolean isLeftYEnable, boolean isRightYEnable) {
        // 不显示表格颜色
        chart.setDrawGridBackground(false);
        chart.setDrawBorders(false);
        chart.setDragEnabled(true);//是否可以用手指移动图表
        chart.setScaleEnabled(false);//设置为false以禁止通过在其上双击缩放图表。是否可以缩放图表,当屏幕一屏显示不下,希望能通过缩放或滑动图表,仅设置这个和上面那个是不行的,还需要配合Matrix来实现
        chart.setTouchEnabled(true);
        chart.animateX(1500);
        chart.setDoubleTapToZoomEnabled(false);
        //下方3个设置ScaleEnabled,DragEnabled用到,表示x轴放大4倍,y不变
//        Matrix matrix=new Matrix();
//        matrix.postScale(4.0f,0.0f);
//        chart.getViewPortHandler().refresh(matrix,chart,false);
        //禁止x轴y轴同时进行缩放
        chart.setPinchZoom(false);
        // 不显示数据描述
        Description description = chart.getDescription();
        description.setEnabled(false);
        chart.setDescription(description);

        chart.setDragDecelerationEnabled(false);//拖拽滚动时,手放开是否会持续滚动,默认是true(false是拖到哪是哪,true拖拽之后还会有缓冲)
        chart.setDragDecelerationFrictionCoef(0.88f);//与上面那个属性配合,持续滚动时的速度快慢,[0,1) 0代表立即停止。
        // 不显示图例
        Legend legend = chart.getLegend();
        legend.setEnabled(false);
        chart.setNoDataTextColor(Color.parseColor("#999999"));
        chart.setNoDataText("你还没有记录数据");
        initLineChart(chart, isXEnbale, isLeftYEnable, isRightYEnable);
        chart.invalidate();
        return chart;
    }

    /**
     * 初始化xy轴
     *
     * @param chart
     */
    public static void initLineChart(LineChart chart, boolean isXEnbale, boolean isLeftYEnable, boolean isRightYEnable) {
        setXAxisBasic(chart, isXEnbale);
        setLeftYAxisBasic(chart, isLeftYEnable);
        setRightYAxisBasic(chart, isRightYEnable);
    }

    /**
     * x轴基础设置
     *
     * @param chart
     * @param isEnable 设置x轴启用或禁用
     */
    public static void setXAxisBasic(LineChart chart, boolean isEnable) {
        //得到x轴
        XAxis xAxis = chart.getXAxis();
        //是否调用x轴
        xAxis.setEnabled(isEnable);
        xAxis.setDrawAxisLine(true);//是否绘制x轴的直线
        xAxis.setDrawGridLines(true);//是否画网格线
        xAxis.setGridColor(Color.GRAY);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);// 设置x轴数据的位置
        xAxis.setTextSize(3);//设置轴标签字体大小
        xAxis.setTextColor(Color.parseColor("#999999"));//设置轴标签字体的颜色

        xAxis.setAvoidFirstLastClipping(true);//图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘
        //设置竖线的显示样式为虚线  lineLength控制虚线段的长度  spaceLength控制线之间的空间
        xAxis.enableGridDashedLine(10f, 10f, 0f);

    }

    /**
     * 左侧y轴基础设置
     *
     * @param chart
     * @param isEnable
     */
    public static void setLeftYAxisBasic(LineChart chart, boolean isEnable) {
        //不显示y轴左边的值
        chart.getAxisLeft().setEnabled(false);

    }

    /**
     * 右侧y轴基础设置
     *
     * @param chart
     * @param isEnable
     */
    public static void setRightYAxisBasic(LineChart chart, boolean isEnable) {
        // 不显示y轴右边的值
        chart.getAxisRight().setEnabled(false);

    }

    /**
     * x轴在点击切换后重新设置的值
     *
     * @param chart
     * @param labelCount
     * @param maximum
     * @param xRangeMaximum
     */
    public static void setXAxis(LineChart chart, int labelCount, float maximum, int xRangeMaximum) {
        chart.setScaleMinima(1.0f, 1.0f);
        chart.getViewPortHandler().refresh(new Matrix(), chart, true);
        //上面两行必须放最上面否则折线间隔失效
        XAxis xAxis = chart.getXAxis();
        xAxis.setLabelCount(labelCount, true);// 设置X轴的刻度数量,第二个参数表示是否平均分配
        xAxis.setAxisMinimum(-1f);
//        xAxis.setAxisMinimum(0f);
//        xAxis.setAxisMaximum(maximum);//设置X轴的值(最小值、最大值、然后会根据设置的刻度数量自动分配刻度显示)
        xAxis.setAxisMaximum(maximum + 1f);//设置X轴的值(最小值、最大值、然后会根据设置的刻度数量自动分配刻度显示)
        xAxis.setGranularity(1f);//设置x轴坐标之间的最小间隔(因为此图有缩放功能,X轴,Y轴可设置可缩放),放在setValueFormatter之前设置
        //设置当前图表中最多在x轴坐标线上显示的刻度线总量为6
        chart.setVisibleXRangeMaximum(xRangeMaximum);//这行必须放到下面,和setLabelCount同时设置,值-1
        chart.setScaleEnabled(false);
        chart.setDoubleTapToZoomEnabled(false);
//        chart.moveViewToX(0f);//切换时间时用来将折线图回归到0点
        chart.moveViewToX(-1f);//切换时间时用来将折线图回归到0点

    }


    /**
     * 显示无数据的提示
     *
     * @param chart
     */
    public static void NotShowNoDataText(Chart chart) {
        chart.clear();
        chart.notifyDataSetChanged();
        chart.setNoDataTextColor(Color.parseColor("#999999"));
        chart.setNoDataText("你还没有记录数据");
        chart.invalidate();
    }


    /**
     * 更新图表
     *
     * @param chart  图表
     * @param values 数据点
     */
    public static void notifyDataSetChanged(LineChart chart, List<Entry> values,
                                            List<String> datelist) {
        chart.getXAxis().setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                if (value<0){
                    return "";
                }
                int index = (int) value;
                if (index < 0 || index >= datelist.size()) {
//                    return "" + (int) value;
                    return "";
                }
                return datelist.get(index);
            }
        });
        chart.invalidate();
        setChartData(chart, values, LineDataSet.Mode.CUBIC_BEZIER);
    }

    /**
     * 设置图表数据
     *
     * @param chart  图表
     * @param values xy数据集合
     */
    public static void setChartData(LineChart chart, List<Entry> values, LineDataSet.Mode mode) {
        LineDataSet lineDataSet;
        //getDataSetCount() 总线条数,getDataSetByIndex(0) 索引0处的xy数据的集合(30天就是30个 0-29)
        if (chart.getData() != null && chart.getData().getDataSetCount() > 0) {
            lineDataSet = (LineDataSet) chart.getData().getDataSetByIndex(0);
            lineDataSet.setValues(values);
            chart.getData().notifyDataChanged();
            chart.notifyDataSetChanged();
        } else {
            //初始化折线
            lineDataSet = new LineDataSet(values, "");
            // 设置曲线颜色
            lineDataSet.setColor(Color.parseColor("#FFCC33"));

            if (mode == null) {
                //设置曲线展示为圆滑曲线(如果不设置则默认折线)
                lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
            } else {
                lineDataSet.setMode(mode);
            }
            // 不显示坐标点的小圆点
            lineDataSet.setDrawCircles(true);
            // 是否显示坐标点的数据,折线上是否绘制数据
            lineDataSet.setDrawValues(true);
            lineDataSet.setValueTextColor(Color.RED);//数据的字体颜色
            lineDataSet.setValueTextSize(8f);//设置显示数据的值的文字大小

            lineDataSet.setLineWidth(1f);//折线的宽度
            lineDataSet.setCircleRadius(2f);//数据点的半径

            // 不显示定位线,是否禁用点击高亮线
            lineDataSet.setHighlightEnabled(false);
            lineDataSet.enableDashedHighlightLine(10f, 5f, 0f);//点击后的高亮线的显示样式
            lineDataSet.setHighlightLineWidth(2f);//设置点击交点后显示高亮线宽
            lineDataSet.setHighLightColor(Color.RED);//设置点击交点后显示交高亮线的颜色

            lineDataSet.setCircleColor(Color.RED);
            lineDataSet.setDrawFilled(false);//是否对数据范围背景进行填充
            lineDataSet.setDrawCircleHole(false);// 数据点圆是否为空心圆
            final DecimalFormat format = new DecimalFormat("###,###,##0");
            lineDataSet.setValueFormatter(new ValueFormatter() {
                @Override
                public String getFormattedValue(float value) {
                    return format.format(value);
                }
            });
            //管理数据集
            LineData data = new LineData(lineDataSet);
            chart.setData(data);
            chart.invalidate();
        }

    }
}

四、柱状图

1.封装类

import android.graphics.Color;
import android.graphics.Matrix;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.charts.Chart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
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.formatter.ValueFormatter;

import java.text.DecimalFormat;
import java.util.List;

/**
 * 柱状图
 */
public class BarChartUtils {
    /**
     * 初始化
     *
     * @param chart
     * @return
     */
    public static BarChart initChart(BarChart chart, boolean isXEnbale, boolean isLeftYEnable, boolean isRightYEnable) {
        chart.setDrawGridBackground(false);
        chart.setDrawBorders(false);
        chart.setDragEnabled(true);
        chart.setScaleEnabled(false);
        chart.setTouchEnabled(true);
        chart.animateX(1500);
        chart.setDoubleTapToZoomEnabled(false);
        chart.setPinchZoom(false);
        Description description = chart.getDescription();
        description.setEnabled(false);
        chart.setDescription(description);
        chart.setDragDecelerationEnabled(false);
        chart.setDragDecelerationFrictionCoef(1f);
        //        chart.setMaxVisibleValueCount();
        chart.setDrawBarShadow(false);

        // 不显示图例
        Legend legend = chart.getLegend();
        legend.setEnabled(false);
        chart.setNoDataTextColor(Color.parseColor("#999999"));
        chart.setNoDataText("你还没有记录数据");
        initLineChart(chart, isXEnbale, isLeftYEnable, isRightYEnable);
        chart.invalidate();
        return chart;
    }

    /**
     * 初始化xy轴
     *
     * @param chart
     */
    public static void initLineChart(BarChart chart, boolean isXEnbale, boolean isLeftYEnable, boolean isRightYEnable) {
        setXAxisBasic(chart, isXEnbale);
        setLeftYAxisBasic(chart, isLeftYEnable);
        setRightYAxisBasic(chart, isRightYEnable);
    }

    /**
     * x轴基础设置
     *
     * @param chart
     * @param isEnable 设置x轴启用或禁用
     */
    public static void setXAxisBasic(BarChart chart, boolean isEnable) {
        //得到x轴
        XAxis xAxis = chart.getXAxis();
        //是否调用x轴
        xAxis.setEnabled(isEnable);
        xAxis.setDrawAxisLine(true);//是否绘制x轴的直线
        xAxis.setDrawGridLines(true);//是否画网格线
        xAxis.setGridColor(Color.GRAY);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);// 设置x轴数据的位置
        xAxis.setTextSize(3);//设置轴标签字体大小
        xAxis.setTextColor(Color.parseColor("#999999"));//设置轴标签字体的颜色

        xAxis.setAvoidFirstLastClipping(true);//图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘
        //设置竖线的显示样式为虚线  lineLength控制虚线段的长度  spaceLength控制线之间的空间
        xAxis.enableGridDashedLine(10f, 10f, 0f);

    }

    /**
     * 左侧y轴基础设置
     *
     * @param chart
     * @param isEnable
     */
    public static void setLeftYAxisBasic(BarChart chart, boolean isEnable) {
        //不显示y轴左边的值
        chart.getAxisLeft().setEnabled(false);

    }

    /**
     * 右侧y轴基础设置
     *
     * @param chart
     * @param isEnable
     */
    public static void setRightYAxisBasic(BarChart chart, boolean isEnable) {
        // 不显示y轴右边的值
        chart.getAxisRight().setEnabled(false);

    }

    /**
     * x轴在点击切换后重新设置的值
     *
     * @param chart
     * @param labelCount
     * @param maximum
     * @param xRangeMaximum
     */
    public static void setXAxis(BarChart chart, int labelCount, float maximum, int xRangeMaximum) {
        chart.setScaleMinima(1.0f, 1.0f);
        chart.getViewPortHandler().refresh(new Matrix(), chart, true);
        //上面两行必须放最上面否则折线间隔失效
        XAxis xAxis = chart.getXAxis();
        xAxis.setLabelCount(labelCount, true);// 设置X轴的刻度数量,第二个参数表示是否平均分配
        xAxis.setAxisMinimum(-1f);
//        xAxis.setAxisMinimum(0f);
//        xAxis.setAxisMaximum(maximum);//设置X轴的值(最小值、最大值、然后会根据设置的刻度数量自动分配刻度显示)
        xAxis.setAxisMaximum(maximum + 1f);//设置X轴的值(最小值、最大值、然后会根据设置的刻度数量自动分配刻度显示)
        xAxis.setGranularity(1f);//设置x轴坐标之间的最小间隔(因为此图有缩放功能,X轴,Y轴可设置可缩放),放在setValueFormatter之前设置
        xAxis.setCenterAxisLabels(false);
        //设置当前图表中最多在x轴坐标线上显示的刻度线总量为6
        chart.setVisibleXRangeMaximum(xRangeMaximum);//这行必须放到下面,和setLabelCount同时设置,值-1
        chart.setScaleEnabled(false);
        chart.setDoubleTapToZoomEnabled(false);
        chart.moveViewToX(-1f);//切换时间时用来将折线图回归到0点
//        chart.moveViewToX(0f);//切换时间时用来将折线图回归到0点
    }


    /**
     * 更新图表
     *
     * @param chart  图表
     * @param values 数据点
     */
    public static void notifyDataSetChanged(BarChart chart, List<BarEntry> values,
                                            List<String> datelist) {

        chart.getXAxis().setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                if (value < 0) {
                    return "";
                }
                int index = (int) value;
                if (index < 0 || index >= datelist.size()) {
//                    return "" + (int) value;
                    return "";
                }
                return datelist.get(index);
            }
        });
        chart.invalidate();
        setChartData(chart, values);
    }

    /**
     * 设置图表数据
     *
     * @param chart  图表
     * @param values xy数据集合
     */
    public static void setChartData(BarChart chart, List<BarEntry> values) {
        BarDataSet lineDataSet;
        //getDataSetCount() 总线条数,getDataSetByIndex(0) 索引0处的xy数据的集合(30天就是30个 0-29)
        if (chart.getData() != null && chart.getData().getDataSetCount() > 0) {
            lineDataSet = (BarDataSet) chart.getData().getDataSetByIndex(0);
            lineDataSet.setValues(values);
            chart.getData().notifyDataChanged();
            chart.notifyDataSetChanged();
        } else {
            //初始化折线
            lineDataSet = new BarDataSet(values, "");
            //设置多彩
            lineDataSet.setColors(Color.parseColor("#FFCC33"));
            // 是否显示坐标点的数据,折线上是否绘制数据
            lineDataSet.setDrawValues(true);
            lineDataSet.setValueTextColor(Color.RED);//数据的字体颜色
            lineDataSet.setValueTextSize(8f);//设置显示数据的值的文字大小

            // 不显示定位线,是否禁用点击高亮线
            lineDataSet.setHighlightEnabled(false);
            lineDataSet.setHighLightColor(Color.RED);//设置点击交点后显示交高亮线的颜色

            final DecimalFormat format = new DecimalFormat("###,###,##0");
            lineDataSet.setValueFormatter(new ValueFormatter() {
                @Override
                public String getFormattedValue(float value) {
                    return format.format(value);
                }
            });

            //管理数据集
            BarData data = new BarData(lineDataSet);
            data.setBarWidth(0.5f);
            chart.setFitBars(true);//是否处理超出的柱块(这是个非常重要的属性,有时候可以帮助我们自动处理超出的柱块),一般都会加上
            chart.setData(data);
            chart.invalidate();
        }

    }

    /**
     * 显示无数据的提示
     *
     * @param chart
     */
    public static void NotShowNoDataText(Chart chart) {
        chart.clear();
        chart.notifyDataSetChanged();
        chart.setNoDataTextColor(Color.parseColor("#999999"));
        chart.setNoDataText("你还没有记录数据");
        chart.invalidate();
    }
}

五、折线图柱状图的调用

public class Activity extends AppCompatActivity {
    private ActivityLayoutBinding mBinding;
    private int xLableCount = 7;
    private int xRangeMaximum = xLableCount - 1;


    private List<Entry> netLineList = new ArrayList<>();
    private List<BarEntry> netBarList = new ArrayList<>();
    private List<String> netDateList = new ArrayList<>();

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_layout);
         //折线图初始化
        LineChartUtils.initChart(mBinding.lineChart, true, false, false);
         //柱状图初始化
        BarChartUtils.initChart(mBinding.barChart, true, false, false);
          
         //设置数据
        setData();
     
       mBinding.rgSelector.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.rb_one:
                        //近7天
                        setData();
                        break;
                    case R.id.rb_two:
                        //近30天
                        setDataFor30();
                        break;            
                    default:
                        break;
                }
            }
        });

}

 /**
     * 获取默认查询的时间(当前时间的前day天)
     */
    public static String formatDatas(int day) {
        Date dNow = new Date(); // 当前时间
        Date dBefore = new Date();
        Calendar calendar = Calendar.getInstance(); // 得到日历
        calendar.setTime(dNow);// 把当前时间赋给日历
        calendar.add(Calendar.DAY_OF_MONTH, -day); // 设置为前三天
        dBefore = calendar.getTime(); // 得到前三天的时间
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd"); // 设置时间格式
        String defaultStartDate = sdf.format(dBefore); // 格式化
        return defaultStartDate;

    }



   /**
    *    new Entry(x,y) x: 折线图中数据值的位置索引 y: 具体数据值
    */  

  private void setData() {
        netLineList.clear();
        netBarList.clear();
        netDateList.clear();
        String s;
        SimpleDateFormat dateFormat1 = new SimpleDateFormat(
                "MM-dd");
        Calendar c = Calendar.getInstance();
        String currentDate = dateFormat1.format(c.getTime());
        netDateList.add(currentDate);
        for (int i = 1; i < 7; i++) {
            s = formatDatas(i);
            netDateList.add(s);
        }
        Collections.reverse(netDateList);

        float[] lineFloat = {11, 15, 16, 17, 16, 16, 12};
        for (int i = 0; i < netDateList.size(); i++) {
//            netLineList.add(new Entry((float) i, (float) Math.random() * 80));
            netLineList.add(new Entry((float) i, lineFloat[i]));
            netBarList.add(new BarEntry((float) i, lineFloat[i]));
        }

       xLableCount = (netDateList.size() + 3) > 7 ? 7 : (netDateList.size() + 3);
       xRangeMaximum = xLableCount - 1;
     
        LineChartUtils.setXAxis(mBinding.lineChart, xLableCount, netDateList.size(), xRangeMaximum);
        LineChartUtils.notifyDataSetChanged(mBinding.lineChart, netLineList, netDateList);
        BarChartUtils.setXAxis(mBinding.barChart, xLableCount, netDateList.size(), xRangeMaximum);
        BarChartUtils.notifyDataSetChanged(mBinding.barChart, netBarList, netDateList);
                       
        //无数据
        //LineChartUtils.NotShowNoDataText(mBinding.lineChart);
        //BarChartUtils.NotShowNoDataText(mBinding.barChart);

    }

 private void setDataFor30() {
       netLineList.clear();
        netBarList.clear();
        netDateList.clear();
        String s2;
        SimpleDateFormat dateFormat2 = new SimpleDateFormat(
                "MM-dd");
        Calendar c2 = Calendar.getInstance();
        String currentDate2 = dateFormat2.format(c2.getTime());
        netDateList.add(currentDate2);
        for (int i = 1; i < 30; i++) {
            s2 = formatDatas(i);
            netDateList.add(s2);
        }
        Collections.reverse(netDateList);


        float[] lineFloat = {14, 15, 16, 17, 16, 16, 12, 14, 15, 16, 17, 16, 16, 12, 14, 15, 16, 17, 16, 16, 12, 14, 15, 16, 17, 16, 16, 12, 14, 15};
        for (int i = 0; i < netDateList.size(); i++) {

//            netLineList.add(new Entry((float) i, (float) Math.random() * 80));
//            netBarList.add(new BarEntry((float) i, (float) Math.random() * 80));
            netLineList.add(new Entry((float) i,  lineFloat[i]));
            netBarList.add(new BarEntry((float) i,  lineFloat[i]));

        }

       xLableCount = (netDateList.size() + 3) > 7 ? 7 : (netDateList.size() + 3);
       xRangeMaximum = xLableCount - 1;
     
        LineChartUtils.setXAxis(mBinding.lineChart, xLableCount, netDateList.size(), xRangeMaximum);
        LineChartUtils.notifyDataSetChanged(mBinding.lineChart, netLineList, netDateList);
        BarChartUtils.setXAxis(mBinding.barChart, xLableCount, netDateList.size(), xRangeMaximum);
        BarChartUtils.notifyDataSetChanged(mBinding.barChart, netBarList, netDateList);
                       
        //无数据
        //LineChartUtils.NotShowNoDataText(mBinding.lineChart);
        //BarChartUtils.NotShowNoDataText(mBinding.barChart);

   }

}

参考
(1条消息) Android图表控件MPAndroidChart之线形图表介绍(LineChart)_盒Beauty的博客-CSDN博客_android linechart

(1条消息) MpAndroidChart-LineChart 折线图使用(含动态添加点,动态添加曲线)_0729Liang-CSDN博客

(1条消息) MPAndroidChart 教程:数据格式器 ValueFormatter(五)_庄宏基的博客-CSDN博客

Android MPAndroidChart使用,X轴标签换行显示 - 简书 (jianshu.com)

实现柱状图与条形图的结合,MPAndroidChart 的简单使用 (juejin.cn)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348

推荐阅读更多精彩内容