MpAndroidChart之lineChart的基本使用


老规矩,现来一波效果图,后续咱们文章也是讲解如果实现效果图对应的效果。
在这里插入图片描述
效果看着还不错吧,这里是使用的一个很火的图表控件进行绘制的, MpandroidChart

https://github.com/PhilJay/MPAndroidChart

使用这个开源的图表控件,可以快速帮我们实现很多炫酷的效果,比如下面的
在这里插入图片描述
在这里插入图片描述
在接下来的一小段时间,我将从基本的控件使用,逐步到源码分析和使用踩坑,整体过一波。

1、基本绘制

我们今天绘制目标是绘制中最简单的LineChart,虽然LineChart看起来比较简单,但是可以帮助我们理清楚MpandroidChart的基本使用方式,帮助我们快速了解一些基本的属性。

在这里插入图片描述
我在我们最上面的图上标注了5个点,先对着图表说明下,他对应的是mpandroidchart中的什么属性。

  • 1-标示的是y轴左边部分,对应的是axisLeft
  • 2-标示的是x轴,对应的是xAxis
  • 5-标示的是x轴的label,可以使用drawLabel进行绘制
  • 3-对应的是legend,标示图例
  • 4-这里是我们的主角了,想要绘制的线

下面上实现代码,代码里面加了属性注释,方便对照属性

<com.github.mikephil.charting.charts.LineChart
            android:id="@+id/lineChartView"
            android:layout_width="match_parent"
            android:layout_height="300dip" />
lineChartView2.description.text = ""
        lineChartView2.description.textColor = Color.RED
        lineChartView2.description.textSize = 16F
        lineChartView2.setNoDataText("无可用数据")  //没数据的时候展示
        lineChartView2.setDrawBorders(false)// 是否绘制边框
        lineChartView2.animateX(500)  //x轴动画
        lineChartView2.setTouchEnabled(true)  //设置支持触摸
        lineChartView2.setScaleEnabled(true)  //是否支持缩放,默认true
        lineChartView2.isDragEnabled = true //是否支持拖拽
        lineChartView2.isScaleXEnabled = true //是否支持x轴缩放
        lineChartView2.isScaleYEnabled = true //是否支持y轴缩放
        lineChartView2.setPinchZoom(true)  //是否支持x、y轴同时缩放,默认为false
        lineChartView2.isDoubleTapToZoomEnabled = true //是否支持双击屏幕放大,默认true
        lineChartView2.isHighlightPerDragEnabled = true  //是否拖拽高亮线(数据点和坐标的提示线),默认true
        lineChartView2.isDragDecelerationEnabled = true //拖拽滚动时,手放开是否会持续滚动,默认true,false是拖动到那算那
        lineChartView2.dragDecelerationFrictionCoef = 0.99F //和上面的属性相配合,配置持续滚动的速度快慢,区间【0-1】0表示立即停止

        //绘制x轴
        val xAxis = lineChartView2.xAxis
        xAxis.position = XAxis.XAxisPosition.BOTTOM //设置x轴位置
        xAxis.axisMinimum = 0F //设置x轴最小值
        xAxis.textSize = 14F
        xAxis.textColor = Color.RED
        xAxis.isEnabled = true //是否显示x轴是否禁用
        xAxis.setDrawLabels(true) //设置x轴标签展示
        xAxis.setDrawGridLines(true) //设置设置x轴上每个对应的点的竖线
        xAxis.enableAxisLineDashedLine(2F, 2F, 2F) //竖线 -虚线样式
        xAxis.labelRotationAngle = 30F //设置x轴标签的旋转角度

        //绘制y轴
        val yAxisLeft = lineChartView2.axisLeft
        yAxisLeft.textSize = 14F
        yAxisLeft.axisMinimum = 0F
        val yAxisRight = lineChartView2.axisRight
        yAxisRight.isEnabled = false

        val lineDataEntities = ArrayList<Entry>()
        val random = Random(10)
        for (index in 1 until 20) {
            lineDataEntities.add(Entry(index.toFloat(), random.nextFloat()))
        }

        val lineDataSet = LineDataSet(lineDataEntities, "股票走势曲线")
        lineDataSet.highLightColor = Color.RED  //设置高亮线的颜色
        lineDataSet.color = Color.BLACK  //折线颜色
        lineDataSet.setCircleColor(Color.BLUE)  //设置交点的圆圈颜色
        lineDataSet.setDrawCircles(false)  //是否绘制交点
        lineDataSet.setDrawValues(false)  //是否显示交叉点的数值
        lineDataSet.valueTextColor = Color.CYAN  //设置交叉点上的值的颜色
        lineDataSet.valueTextSize = 14F //设置交叉点上值的字体大小
        lineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER //设置平滑曲线
        lineDataSet.fillColor = Color.parseColor("#F14400")
        lineDataSet.setDrawFilled(true)

        val lineData = LineData(lineDataSet)
        lineChartView2.data = lineData
        lineChartView2.invalidate()

2、Marker使用

在这里插入图片描述

如果你突发奇想,想要可以长按的时候,展示当前按的位置的数据。不要担心,mpandroidchart作为一个强大的图表库,他是完全可以满足你的。

那么,marker是时候登场了。

使用 marker其实很简单。只需要3步。

  • 1、继承MarkView,在refreshContent(e: Entry?, highlight: Highlight?)中构造你要展示的数据内容。
  • 2、使用lineChartView.marker = 你的marker,将marker和图表绑定到一起。
  • 3、最关键的一步,运行代码,查看效果。
class SimpleMarkerView(context: Context?) :
    MarkerView(context, R.layout.simple_marker_view) {

    override fun refreshContent(e: Entry?, highlight: Highlight?) {
        //这里的e值的是长按位置的数据,hignlight可以获取我们长按位置的x、y坐标
        if (e?.y == 0F || e?.x == 0F) {
            tv_off.text = "暂无数据"
        } else {
            tv_off.text = "第${e?.x}天支出${e?.y}元"
        }
        super.refreshContent(e, highlight)
    }

    //用来设置marker和长按的时候的指示hignlight的距离
    override fun getOffset(): MPPointF {
        return MPPointF((-width / 2).toFloat(), (-height).toFloat())
    }
}
lineChartView.marker = SimpleMarkerView(this)

这里多说两句废话,或许是对你有用的,如果你想让长按的marker在手指离开后自动小时,可以自己通过手势实现。

3、格式化x轴和y轴的数据展示

如果你细心的画,肯定会发现,我们数据的x轴和y轴数据展示不一样,x轴是xx天的格式展示。这种是怎么实现的呢?

这里就要用到坐标轴的格式化展示了。

xAxis.valueFormatter = object : ValueFormatter() {
            override fun getFormattedValue(value: Float): String {
                return "${lineEntities[value.toInt()].x}天"
            }
        }

4、设置线条区域全填充、设置渐变

要实现这两个功能,也很简答,首先是全填充。

lineDataSet.setDrawFilled(true)

可以直接使用LineDataSet的属性实现。同样,如果想要设置渐变的话,可以使用lineDataSet.fillDrawable设置一个drawable对象。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MPAndroidChart库中的LineChart图表可以通过动态刷新来实现实时更新数据的效果。下面是一个简单的示例代码: 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. 在Java代码中设置LineChart基本属性,并创建一个LineData对象来存储图表数据: ```java LineChart lineChart = findViewById(R.id.line_chart); // 设置图表的基本属性 lineChart.setDragEnabled(true); lineChart.setScaleEnabled(true); lineChart.getDescription().setEnabled(false); lineChart.getLegend().setEnabled(false); // 创建一个LineData对象来存储图表数据 LineData lineData = new LineData(); // 添加LineData对象到LineChart图表中 lineChart.setData(lineData); ``` 3. 动态更新LineChart的数据: ```java // 获取LineData对象 LineData lineData = lineChart.getData(); if (lineData != null) { // 获取LineDataSet对象 LineDataSet lineDataSet = (LineDataSet) lineData.getDataSetByIndex(0); // 如果LineDataSet对象不存在,则创建一个 if (lineDataSet == null) { lineDataSet = new LineDataSet(null, "Label"); // 设置LineDataSet的属性,比如线条颜色、宽度等 lineData.addDataSet(lineDataSet); } // 获取需要添加的新数据 Entry entry = new Entry(lineDataSet.getEntryCount(), 新数据值); // 添加新数据到LineData对象中 lineData.addEntry(entry, 0); // 通知LineChart图表数据已经发生变化 lineData.notifyDataChanged(); lineChart.notifyDataSetChanged(); // 设置LineChart图表只显示最近的几个数据 lineChart.setVisibleXRangeMaximum(10); // 滚动到最新的数据位置 lineChart.moveViewToX(lineData.getEntryCount()); } ``` 通过上述步骤,可以实现LineChart图表的动态刷新。每次更新数据之后,调用`notifyDataChanged()`和`notifyDataSetChanged()`来通知图表数据已经发生变化,同时设置可见的X范围和滚动到最新的数据位置,从而实现动态刷新的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值