最近项目中用到图表,之前用的mpchart 发现线条连接点只能是远点 不能设置正方形 Google一把 发现hellochart可以实现
基本配置如下
private fun initLineChart() {
val line = Line(mPointValues) //折线图数据
val lines = java.util.ArrayList<Line>()
//展示2位小数
val chartValueFormatter = SimpleLineChartValueFormatter(2);
line.formatter = chartValueFormatter//显示小数点
line.shape = ValueShape.SQUARE//折线图上每个数据点的形状 这里是正方形 (有三种 :ValueShape.SQUARE ValueShape.CIRCLE ValueShape.SQUARE)
line.isCubic = false//曲线是否平滑 折线
line.isFilled = false//是否填充曲线的面积
// line.setHasLabels(true);//曲线的数据坐标是否加上备注
line.setHasLabelsOnlyForSelected(true)//点击数据坐标提示数据(设置了这个line.setHasLabels(true);就无效)
line.setHasLines(true)//是否用直线显示。如果为false 则没有曲线只有点显示
line.setHasPoints(true)//是否显示圆点 如果为false 则没有原点只有点显示
line.color = findColorById(R.color.home_color_fault)//设置折现颜色
line.strokeWidth = 1//设置折线宽度
line.pointColor = findColorById(R.color.home_color_fault)// 设置节点颜色
line.pointRadius = 4// 设置节点半径
lines.add(line)
val data = LineChartData()
data.lines = lines
//坐标轴
val axisX = Axis() //X轴
axisX.setHasTiltedLabels(true)
axisX.textColor = findColorById(R.color.home_color_position) //设置字体颜色
//axisX.setName("未来几天的天气"); //表格名称
axisX.textSize = 11//设置字体大小
axisX.maxLabelChars = 6 //最多几个X轴坐标
axisX.values = mAxisXValues //填充X轴的坐标名称
axisX.setHasTiltedLabels(false)// 设置X轴文字向左旋转45度
axisX.setHasSeparationLine(false)
axisX.setHasLines(true)
data.axisXBottom = axisX //x 轴在底部
// data.setAxisXTop(axisX); //x 轴在顶部
val axisY = Axis() //Y轴
//axisY.maxLabelChars = 7 //默认是3,只能看最后三个数字
axisY.name = ""//y轴标注
axisY.textSize = 11//设置字体大小
axisY.textColor = findColorById(R.color.transparent)//不展示y轴 这里设置透明色 保留y轴占位
axisY.setHasSeparationLine(true)
axisY.setHasLines(true)
data.axisYLeft = axisY //Y轴设置在左边
data.axisYRight = axisY //y轴设置在右边 如厕设置 防止x轴最后一个标签显示不全 也可用padding
//设置行为属性,支持缩放、滑动以及平移
lineChart.isInteractive = true//交互
lineChart.isScrollEnabled = true//滑动
lineChart.isZoomEnabled = false//缩放
lineChart.zoomType = ZoomType.HORIZONTAL
lineChart.setContainerScrollEnabled(true, ContainerScrollType.HORIZONTAL)
lineChart.lineChartData = data
lineChart.visibility = View.VISIBLE
//设置坐标从0开始
val v = Viewport(lineChart.maximumViewport)
v.bottom = if (minY >= 0) 0f else minY
v.top = maxY
//固定Y轴的范围,如果没有这个,Y轴的范围会根据数据的最大值和最小值决定,这不是我想要的
lineChart.maximumViewport = v
v.left = 0f
//设置x轴缩放 防止数据过多产生堆积
v.right = 6f
lineChart.currentViewport = v
//为图表设置值得触摸事件
// lineChart.onValueTouchListener = object : LineChartOnValueSelectListener {
// override fun onValueSelected(lineIndex: Int, pointIndex: Int, value: PointValue) {
// App.getInstance().showToast(value.y.toString())
// }
//
// override fun onValueDeselected() {
//
// }
// }
}