开源项目MPAndroidChart的相关使用说明,非常强大的一个开源库。
1. xx.setViewPortOffsets
设置图表图表位置,因为有时候我们的图表可能数值有被遮挡住的问题
或者设置x轴setAvoidFirstLastClipping
2. 设置左边Y轴在图表中完全显示
首先设置
axisLeft.setPosition(YAxisLabelPosition.INSIDE_CHART)
这个时候顶部和底部的刻度显示会被挡住部分,而且不是完全在图表内部,
还要设置 xx.rendererLeftYAxis = YAxisRenderer
当然YAxisRenderer得自定义了。
3.设置覆盖层marker
chart.marker = MarkerView
markerView.chartView = chart
至于覆盖层MarkerView要显示成啥样,最好还是自己自定义。
4. 设置marker跟随手指显示
当然首先是得设置marker,然后记得设置 dragEnable,比如下面设置跟随x轴显示
isDragYEnabled = false
isDragXEnabled = true
5.高亮手指点击位置
注意,当使用CombinedChart图表中有多个折线或者其他图表时,默认会高亮距离手指最近的那个图表.
如果要实现同时高亮一个轴上的所有图表,不管是一个chart还是多个chart的话,得另外设置图表联动高亮。
// 折线图属性设置多一些,柱状图就没那么多属性了,因为不适合高亮
LineDataSet(entries, "line").apply {
isHighlightEnabled = true
enableDashedHighlightLine(6f, 4f, 0f)
setDrawHorizontalHighlightIndicator(false)
setDrawVerticalHighlightIndicator(true)
lineWidth = 1.2f
setDrawHighlightIndicators(true)
}
// 设置监听
chart.apply {
setOnChartValueSelectedListener(object : OnChartValueSelectedListener {
override fun onValueSelected(e: Entry?, h: Highlight?) {
h?.let {
val highlightFirst = Highlight(it.x, it.y, 0)
// 注意一定得设置为0,不然marker配合一起显示会导致崩溃,别问我是怎么知道的-_-!!
highlightFirst.dataIndex = 0
val highlightSecond = Highlight(it.x, it.y, 1)
highlightSecond.dataIndex = 0
highlightValues(arrayOf(highlightFirst, highlightSecond))
val bartHighlight = Highlight(h.x, h.y, 0)
bartHighlight.dataIndex = 0
barChart.highlightValues(arrayOf(bartHighlight))
}
}
override fun onNothingSelected() {
barChart.highlightValue(null)
}
})
}
6.实现两图联动
// 实现两图联动
// 把折线图的手势传递给柱状图
lineChart.onChartGestureListener = CoupleChartGestureListener(lineChart, arrayOf(barChart))
// 把柱状图的手势传递给折线图
barChart.onChartGestureListener = CoupleChartGestureListener(barChart, arrayOf(lineChart))
class CoupleChartGestureListener : OnChartGestureListener {}
7. x轴上的标签第一个或最后一个显示不完整
setAvoidFirstLastClipping(boolean enabled)
: 如果设置为true,则在绘制时会避免“剪掉”在x轴上的图表或屏幕边缘的第一个和最后一个坐标轴标签项
8.移除chart默认的各种边距
chart.minOffset = 0f
9.设置内部边距
axisLeft.spaceTop,axisLeft.spaceBottom
10.extraTopOffset等会影响markerview是否显示,计算的时候会判断点是否在区域内
11.如果X轴底部显示不完整可以设置偏移量
setExtraBottomOffset(3f)
12.