放大时图表消失
当我通过X轴放大图表时,图表消失。为什么会发生这种情况? 库版本 - MPAndroidChart:V3.0.0-β1放大时图表消失
我用例子LineChartTime。并在setData()函数中编辑long hourMillis = 36000L;
,并得到图视图的问题。
更新!
当时间采样小于360000毫秒或6分钟时,问题就变成了。在例如“LineChartTime”的1小时内,一切正常。但是,如果我将x值从1451606400000L减少到0,并使时间采样等于1毫秒,那么一切都可以。所以我认为浮点类型的x值的主要问题,即处理不正确的大LONG值。
所以,我找到了临时解决方案。 当我当前的时间,我减少它在1451606400000L(2016 01.01 00:00),并提请没有那么大的价值,而且还改变了格式化字符串
xAxis.setValueFormatter(new AxisValueFormatter() {
private FormattedStringCache.Generic<Long, Date> mFormattedStringCache = new FormattedStringCache.Generic<>(new SimpleDateFormat("yyyy dd MMM HH:mm"));
@Override
public String getFormattedValue(float value, AxisBase axis) {
Long v = (long) value + 1451606400000L;
return mFormattedStringCache.getFormattedValue(new Date(v), v);
}
如果有人有其他的解决方案,请让我知道。
放大时,库不会渲染可见区域外的值。这里的算法使用float
类型(可能有很多原因),但这会导致“大”数问题。
float
内部是一个32位IEEE 754,这意味着它只能表示大约7位有效数字。以毫秒为单位的时间戳将截断最后一位数字(至少为了确定要绘制哪些线条),所以一些线条将消失。
选项1: 内的float
精度,或者至少更接近它的范围内使用时间戳。
如果您正在密谋当前的数据,一。减去存储 System.currentTimeMillis的的)从您的时间戳值(和添加相同的值重新格式化时,当你在自己的解决方案一样。如果您能够以1秒的精度生活,请将时间戳分为60000,并相应地调整格式化程序。
选项2:修补库以在可见区域外绘制线条。
如果您没有大型数据集,则可以使用的快速解决方法是呈现所有内容。对于折线图,更改以下2种方法中的内容BarLineChartBase.java
近线1280这样的:
public float getLowestVisibleX() {
return mXAxis.mAxisMinimum;
}
public float getHighestVisibleX() {
return mXAxis.mAxisMaximum;
}
这可能是疯狂低效的,这可能是也可能不是根据您的数据集大小的问题。
请将您的解决方案转移到下面的答案框中,然后回滚最新的编辑。我们不希望将问题的答案压缩在问题帖子中,我们宁愿不在标题中解决问题。谢谢。 – halfer