Android图表(最新版)----折线图

在应用开发过程中,为了直观地显示数据变化的趋势,往往采用折线图、柱状图显示,为了显示比例的分配,采用饼状图显示,这一系列的图形,都可以使用一个开源框架MPAndroidChart来实现。

在GitHub上下载这个开源框架,引进Android项目中。
在这里插入图片描述

implementation project(path: ':MPAndroidChart')

在这里插入图片描述

public class LineChart extends BarLineChartBase<LineData> implements LineDataProvider {

    public LineChart(Context context) {
        super(context);
    }

    public LineChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LineChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void init() {
        super.init();

        mRenderer = new LineChartRenderer(this, mAnimator, mViewPortHandler);
    }

    @Override
    public LineData getLineData() {
        return mData;
    }

    @Override
    protected void onDetachedFromWindow() {
        // releases the bitmap in the renderer to avoid oom error
        if (mRenderer != null && mRenderer instanceof LineChartRenderer) {
            ((LineChartRenderer) mRenderer).releaseBitmap();
        }
        super.onDetachedFromWindow();
    }
}

1、折线图

在布局文件中,添加折线图的布局。

<com.github.mikephil.charting.charts.LineChart
        android:id="@+id/line_chart"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"></com.github.mikephil.charting.charts.LineChart>

接下来就需要在代码中设置折线图的各项数据。

(1)设置折线图描述setDescription

 //设置该折线图的描述
        Description description = new Description();
        description.setText("天气变化");
        line_chart.setDescription(description);
        //是否绘制网格背景
        line_chart.setDrawGridBackground(true);

(2)设置X轴显示XAxis

//x轴的设置
        XAxis xAxis = line_chart.getXAxis();
        //将x轴的描述(文字 or 数字)显示在x轴下方
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //是否绘制x轴的网格线
        xAxis.setDrawGridLines(false);
        //是否绘制x轴的轴线
        xAxis.setDrawAxisLine(true);

(3)Y轴的设置YAxis

 //y轴设置
        YAxis yAxis = line_chart.getAxisLeft();
        //y轴提供数据的区间个数5个  false:是否均匀显示数据
        yAxis.setLabelCount(5,false);

setLabelCount指的是设置y轴区间个数,类似于下图展示的,也是大部分折线图都采用的显示方式,属于等比例显示区间。
在这里插入图片描述
(4)设置X和Y轴的数据setData

line_chart.setData(new LineData());

需要的数据源是LineData数据源,下面先看一下源码,分析一下。

public class LineData extends BarLineScatterCandleBubbleData<ILineDataSet> {

    public LineData() {
        super();
    }

    public LineData(ILineDataSet... dataSets) {
        super(dataSets);
    }

    public LineData(List<ILineDataSet> dataSets) {
        super(dataSets);
    }
}

LineData可以设置ILineDataSet... dataSets多个参数,而且是LineDataSet集,所以传入数据,就需要创建LineDataSet集合。

public LineDataSet(List<Entry> yVals, String label) {
        super(yVals, label);

        // mCircleRadius = Utils.convertDpToPixel(4f);
        // mLineWidth = Utils.convertDpToPixel(1f);

        if (mCircleColors == null) {
            mCircleColors = new ArrayList<Integer>();
        }
        mCircleColors.clear();

        // default colors
        // mColors.add(Color.rgb(192, 255, 140));
        // mColors.add(Color.rgb(255, 247, 140));
        mCircleColors.add(Color.rgb(140, 234, 255));
    }

LineDataSet需要传入的两个数据,一个是Entry的集合,代表折线图中的点,是y轴的数据,label指的是对y轴数据的描述。

Entry代表一个点,传入的2个参数分别代表x轴的数据和y轴的数据,y轴代表数据,x轴指的是时间。

   * @param x the x value
     * @param y the y value (the actual value of the entry)
     */
    public Entry(float x, float y) {
        super(y);
        this.x = x;
    }

所以具体显示数据的代码,如下所示

      //显示数据
        line_chart.setData(getLineData());
    }

    private LineData getLineData() {
        //提供折线数据
        List<Entry> entries = new ArrayList<>();
        for (int i = 0; i < 12; i++) {
        	//第一个参数:x轴的数据
        	//第二个参数:y轴的数据
            entries.add(new Entry(i,(float) (Math.random() * 10) + 50));
        }
        //第二个参数:如图显示
        LineDataSet dataSet = new LineDataSet(entries,"随机数");
        //设置折线的宽度
        dataSet.setLineWidth(2.5f);
        //圆圈的大小
        dataSet.setCircleHoleRadius(4.5f);
        //设置颜色
        dataSet.setHighLightColor(Color.rgb(244,0,0));
        //是否显示圆点处的数据
        dataSet.setDrawValues(true);

        LineData lineData = new LineData(dataSet);
        return lineData;
    }

如图显示的数据
在这里插入图片描述
这个数据的数据源是自己造的,实际的项目开发中,会通过网络请求获取服务器的数据。

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在 Android 中绘制折线图,可以使用 Android 提供的图表库或第三方库。 以下是使用 Android 提供的图表库来绘制折线图的步骤: 1. 在 XML 布局文件中添加一个 `LineChart` 控件。 ```xml <com.github.mikephil.charting.charts.LineChart android:id="@+id/line_chart" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 在代码中获取 `LineChart` 控件,并设置数据。 ```java LineChart lineChart = findViewById(R.id.line_chart); List<Entry> entries = new ArrayList<>(); entries.add(new Entry(1, 10)); entries.add(new Entry(2, 20)); entries.add(new Entry(3, 30)); entries.add(new Entry(4, 40)); entries.add(new Entry(5, 50)); LineDataSet dataSet = new LineDataSet(entries, "Label"); LineData lineData = new LineData(dataSet); lineChart.setData(lineData); ``` 3. 可以通过设置 `LineChart` 的属性来自定义折线图的样式,例如: ```java lineChart.getDescription().setEnabled(false); lineChart.setTouchEnabled(true); lineChart.setDragEnabled(true); lineChart.setScaleEnabled(true); lineChart.setDrawGridBackground(false); lineChart.setPinchZoom(true); lineChart.getLegend().setEnabled(false); XAxis xAxis = lineChart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setDrawGridLines(false); YAxis leftAxis = lineChart.getAxisLeft(); leftAxis.setDrawGridLines(false); YAxis rightAxis = lineChart.getAxisRight(); rightAxis.setEnabled(false); ``` 以上是使用 Android 提供的图表库来绘制折线图的基本步骤和样式设置,需要注意的是,这只是一个简单的例子,实际应用中还需要根据实际需求进行更加复杂的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Awesome_lay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值