解决Hellochart数据相同不显示问题,数据首尾相连问题
2021-04-12 本文已影响0人
HMZZS
-
hellocharts这个开源库,传送门:https://github.com/lecho/hellocharts-android ,一是因为引入方便,二是代码也比较清晰,便于加到项目中。还有一个重要的原因,这个库可以支持折线表,柱状表,饼状表以及气泡状表,而且实现的效果非常棒。
-
由于APP需要利用Hellochart显示PH,温度,但是温度和PH数据一段时间内基本上一致,这里就有了问题,hellochart对于Y的数组最大值等于最小值情况处理的不是很好,无法显示图像,有的博主修改JAR包的源文件彻底解决,但是JAR包修改有点困难
-
mAxisXValues, mPointValues这两个集合不同的item需要重新new一遍,便可处理好首尾相连bug
-
看图修改问题
图片.png
- 这个是Chart初始化配置函数如下
private void initLineChart(LineChartView line_chart, List<AxisValue> mAxisXValues, List<PointValue> mPointValues) {
//折线的颜色(随机颜色)
// Line line = new Line(mPointValues).setColor(Color.parseColor("#0084FF"));
Line line = new Line(mPointValues).setColor(Color.parseColor("#"+(int)((Math.random()*9+1)*100000)));
List<Line> lines = new ArrayList<>();
line.setShape(ValueShape.CIRCLE);//折线图上每个数据点的形状 这里是圆形 (有三种 :ValueShape.SQUARE ValueShape.CIRCLE ValueShape.DIAMOND)
line.setCubic(false);//曲线是否平滑,即是曲线还是折线
line.setFilled(true);//是否填充曲线的面积
line.setHasLabels(true);//曲线的数据坐标是否加上备注
// line.setHasLabelsOnlyForSelected(true);//点击数据坐标提示数据(设置了这个line.setHasLabels(true);就无效)
line.setHasLines(true);//是否用线显示。如果为false 则没有曲线只有点显示
line.setHasPoints(true);//是否显示圆点 如果为false 则没有原点只有点显示(每个数据点都是个大的圆点)
lines.add(line);
LineChartData data = new LineChartData();
data.setLines(lines);
//坐标轴
Axis axisX = new Axis(); //X轴
axisX.setHasTiltedLabels(true); //X坐标轴字体是斜的显示还是直的,true是斜的显示
axisX.setTextColor(Color.GRAY); //设置字体颜色
//axisX.setName("date"); //表格名称
axisX.setTextSize(10);//设置字体大小
axisX.setMaxLabelChars(10); //最多几个X轴坐标,意思就是你的缩放让X轴上数据的个数7<=x<=mAxisXValues.length
axisX.setValues(mAxisXValues); //填充X轴的坐标名称
data.setAxisXBottom(axisX); //x 轴在底部
//data.setAxisXTop(axisX); //x 轴在顶部
axisX.setHasLines(false); //x 轴分割线
// Y轴是根据数据的大小自动设置Y轴上限(在下面我会给出固定Y轴数据个数的解决方案)
Axis axisY = new Axis(); //Y轴
axisY.setName("");//y轴标注
axisY.setTextSize(10);//设置字体大小
data.setAxisYLeft(axisY); //Y轴设置在左边
//data.setAxisYRight(axisY); //y轴设置在右边
// 这样添加y轴坐标 就可以固定y轴的数据
// List<AxisValue> values = new ArrayList<>();
// for(int i = 0; i < mPointValues.size(); i++){
// AxisValue value = new AxisValue(mPointValues.get(i).getY());
// values.add(value);
// }
// axisY.setValues(values);
//设置行为属性,支持缩放、滑动以及平移
line_chart.setInteractive(true);
line_chart.setZoomType(ZoomType.HORIZONTAL);
line_chart.setMaxZoom((float) 2);//最大方法比例
line_chart.setContainerScrollEnabled(true, ContainerScrollType.HORIZONTAL);
line_chart.setLineChartData(data);
line_chart.setVisibility(View.VISIBLE);
//设置X轴数据的显示个数(x轴0-10个数据)
Viewport v = new Viewport(line_chart.getMaximumViewport());
if (v.top == v.bottom && v.top != 0) { //解决最大值最小值相等时,图不能展示问题
v.top = v.top * 2;
v.bottom = 0;
} else if (v.bottom == 0.0) { //解决最大值最小值相等时全部为0时,图不能展示问题
v.top = 1;
v.bottom = 0;
}
/**注:下面的7,10只是代表一个数字去类比而已
* 当时是为了解决X轴固定数据个数。见(http://forum.xda-developers.com/tools/programming/library-hellocharts-charting-library-t2904456/page2);
*/
line_chart.setMaximumViewport(v);
v.left = 0;
v.right = 10;
line_chart.setCurrentViewport(v);
}
- 如下图所示