我的(线型)GraphView面临一些奇怪的问题! 为了更好地解释它,我将添加一张图片,显示开始水平滚动(不需要垂直滚动)时发生的情况。
问题是: 数据点显示正确,但标签显示不正确!我在上面的图片中用红色写了正确的标签!
每当我开始滚动标签时,它们就会怪异地开始“跳跃”。
从具有String / Integer对的SharedPreference文件中接收数据点[字符串始终为MMMyyyy(例如“ Mar2020”)]
我从我的SP文件中获取了配对,将字符串作为静态标签放入图形中,以这种“逻辑”方式使用DataPoints(而不是实际代码!)
DataPoint[0] = (0, valueOfKey0)
DataPoint[1] = (1, valueOfKey1)
以下是在活动中如何调用/绘制图形的代码
private void setupGraph(final GraphView graph, String subName){
GraphDataHelper graphDataHelper = new GraphDataHelper(mContext);
LineGraphSeries<DataPoint> series;
/*Have to call .removeAllSeries to draw each graph individually
* Otherwise they will be drawn over another!*/
graph.removeAllSeries();
/*Gets Values from each Sub
* --> Gets values form each key/value pair of specific SharedPreference-file
* --> sets values in order (0, 1, 2,... n)*/
series = new LineGraphSeries<DataPoint>(graphDataHelper.generateGraphData(subName));
series.setDrawDataPoints(true);
series.setColor(getResources().getColor(R.color.casualWhite));
series.setAnimated(true);
graph.addSeries(series);
/*Fill Labels for X-Axis:
* Get the specific Monthly-Keys for the choosen Sub
* In special cases extra rules are declared in .getSpecificSubMonthKeys() method
* Put all entries of ArrayList in Array (StaticLabelsFormatter only works with "normal" Array)*/
ArrayList<String> array_paths = graphDataHelper.getSpecificSubMonthKeys(subName);
int size = array_paths.size();
String[] paths = new String[size];
for (int i=0; i<size; i++){
paths[i] = array_paths.get(i);
}
StaticLabelsFormatter staticLabelsFormatter = new StaticLabelsFormatter(graph);
staticLabelsFormatter.setHorizontalLabels(paths);
graph.getGridLabelRenderer().setLabelFormatter(staticLabelsFormatter);
graph.getViewport().setXAxisBoundsManual(true);
if(size == 5 || size > 5){
graph.getViewport().setMinX(0.0);
graph.getViewport().setMaxX(4.0);
graph.getGridLabelRenderer().setNumHorizontalLabels(5);
} else if(size == 4){
graph.getViewport().setMinX(0.0);
graph.getViewport().setMaxX(3.0);
graph.getGridLabelRenderer().setNumHorizontalLabels(4);
} else if(size == 3){
graph.getViewport().setMinX(0.0);
graph.getViewport().setMaxX(2.0);
graph.getGridLabelRenderer().setNumHorizontalLabels(3);
} else if(size == 2){
graph.getViewport().setMinX(0.0);
graph.getViewport().setMaxX(1.0);
graph.getGridLabelRenderer().setNumHorizontalLabels(2);
}
graph.getViewport().setScrollable(true);
graph.getGridLabelRenderer().setHorizontalLabelsColor(getResources().getColor(R.color.midBlue));
graph.getGridLabelRenderer().setVerticalLabelsColor(getResources().getColor(R.color.midBlue));
graph.getGridLabelRenderer().setGridColor(getResources().getColor(R.color.darkBlue));
graph.getGridLabelRenderer().setPadding(50);
graph.getGridLabelRenderer().setLabelsSpace(30);
我之所以要求使用.removeAllSeries,是因为用户可以通过下拉菜单Spinner调用其他图形。
我还设置了不同的MinX和MaxX点,因为可能会出现一个条目还没有5个DataPoints的情况,因此我就此改变了视口(没有找到更好的解决方案,所以我是也可以在此处打开一些更好的代码,但是它确实可以这样工作)。我的SharedPreference文件始终至少有2个键/值对
还有一点额外的问题:是否有办法只给水平标签一些额外的标签空间。如果使用setLabelSpace,它也将应用于垂直标签,但我不希望这样做。但是水平标签离轴太近了。
也为难看的代码感到抱歉。这是我第一次使用GraphView!
谢谢!