一、常用属性

参考地址:https://blog.csdn.net/qq_25943493/article/details/51803497
中文文档:https://github.com/baiqingsong/ChartDawn

// 禁止触摸/拖动/缩放
bc.setTouchEnabled(false)
bc.isDragEnabled = false
bc.setScaleEnabled(false)
//不绘制网格背景
bc.setDrawGridBackground(false)
// 处理y坐标轴
bc.axisRight.isEnabled = false // 右侧不显示Y轴
bc.axisLeft.axisMinimum = 0f //设置Y轴显示最小值,不然0下面会有空隙
bc.axisLeft.setDrawGridLines(false) //不设置Y轴水平线显示
bc.axisLeft.axisLineColor = Color.TRANSPARENT // 设置左侧y轴坐标轴线的颜色

// 处理x坐标轴
bc.xAxis.position = XAxis.XAxisPosition.BOTTOM // 设置坐标轴位置
bc.xAxis.setDrawGridLines(false) // 设置X轴竖直线的显示
// 显示每一个 X 轴的数值,第一个参数为x轴数值个数,第二个是否强制使用坐标轴数值
bc.xAxis.setLabelCount(10, false)

// 设置偏移量
bc.extraBottomOffset = 14f // 底部偏移量

// 设置描述
bc.description = Description().apply {
text = "min"
setPosition(30.toPx().toFloat(), 25.toPx().toFloat()) // 修改显示的位置
textAlign = Paint.Align.LEFT // 显示在左边/右边/中间
}

// 处理标签
val legend = bc.legend
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER // 设置标签横向居中
legend.verticalAlignment = Legend.LegendVerticalAlignment.TOP // 设置标签在顶部
//背景阴影
bc.setDrawBarShadow(false)
bc.isHighlightFullBarEnabled = false
//显示边界
bc.setDrawBorders(false)
bc.setPadding(1, 1, 1, 1)
// 设置描述
bc.description = Description().apply {
text = ""
}

二、自定义坐标单位

自定义x轴坐标的单位

// 设置自定义单位
bc.xAxis.setValueFormatter { value, axis -
return@setValueFormatter "$value%" // 在数值后面增加百分号
}

三、设置点击事件

setTouchEnabled(true)
bc.setOnChartValueSelectedListener(object :OnChartValueSelectedListener{
override fun onNothingSelected() {
logger.info("onNothingSelected")
}
override fun onValueSelected(e: Entry?, h: Highlight?) {
logger.info("onValueSelected")
}
})

四、关闭高亮

https://github.com/PhilJay/MPAndroidChart/wiki/Highlighting
比如关闭折线图的十字线,可以使用关闭高亮实现。
但是关闭了高亮后,就无法回调setOnChartValueSelectedListener,如果不想高亮,同时也能回调setOnChartValueSelectedListener,可以设置修改高亮颜色,或关闭指示器(折线图)

set.highLightColor = Color.TRANSPARENT // 修改高亮颜色
set.setDrawHighlightIndicators(false) // 关闭指示器
set.highlightCircleStrokeColor = Color.BLACK // 修改指示器小圆圈边框颜色
set.highlightCircleFillColor = Color.BLACK // 修改指示器小圆圈的颜色

需要在设置data的时候进行关闭,如:

private fun initLineData(): LineData {
val lineData = LineData()
...
val set = LineDataSet(entries, "折线数据")
...
set.isHighlightEnabled = false // 关闭高亮
lineData.addDataSet(set)
return lineData
}

获取高亮的点的真实x, y 坐标(相对于图标控件的),一般用于点击点后再改点展示该点的详细信息

bc.setOnChartValueSelectedListener(object : OnChartValueSelectedListener {
override fun onNothingSelected() {
logger.info("onNothingSelected")
}
override fun onValueSelected(e: Entry?, h: Highlight?) {
logger.info("onValueSelected")
showValueDetail(bc, h?.xPx!!.toInt(), h.yPx.toInt())
}
})

tip: 如果希望在该点下展示悬浮窗,应该加上图标控件的坐标,如下:

private fun showValueDetail(v: View, x: Int, y: Int) {
logger.info("x = $x, y = $y, top = ${v.top}")
val pop = ValueDetailPopupWindow(this.requireContext()) // 获取图标控件在窗口的真实坐标
val data = arrayListOf<String>("ssss", "sssdcc", "vvvvv")
val xy = IntArray(2)
v.getLocationInWindow(xy)
pop.showAtLocation(v, Gravity.NO_GRAVITY, x + xy[0], y + xy[1])
pop.setData(data)
}

image-20200910105606011

五、设置图例(标签)

// 处理标签
val legend = bc.legend
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER // 设置标签横向居中
legend.verticalAlignment = Legend.LegendVerticalAlignment.TOP // 设置标签在顶部
legend.form = Legend.LegendForm.LINE // 图例类型:线、方块
legend.formLineDashEffect = DashPathEffect(floatArrayOf(2f, 2f) 2f) // 设置为虚线(需要form = Legend.LegendForm.LINE)
legend.formLineWidth = 2f // 高度
legend.formSize = 16f // 宽度
legend.textSize = 12f