我已经使用Graphview
已有一段时间了,大部分时间是LineGraph
和PointGraph
,可以在Link to GraphView上找到指向GraphView
的链接。
但是现在我需要一个LineGraph
,它可以在需要时填充整个0-100和100-200。例如,当点为70时,它将填充整个0-100空间,看起来像这样。
另一个要求是,仍然需要像LineGraph
一样,因为它需要能够向右移动。
有人知道如何使用GraphView
完成此操作,或者是否可以完全使用GraphView
完成此操作。
或者也许,如果我将点设置为50,并且将线宽设置为正好覆盖+/- 50,那么它也将相同,但是这里的问题是每个屏幕上的线宽都不同。
答案 0 :(得分:1)
您可以为PointGraphSeries使用自定义形状以获得所需的效果。在以下代码中,我将创建一个自定义矩形。这样可以为您提供一些操作建议:
int mX = 0;
private void addPoints(double point, PointsGraphSeries<DataPoint> series) {
point = Math.floor(point / 100) * 100;
DataPoint dataPoint = new DataPoint(mX++, point);
series.appendData(dataPoint, false, 100);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GraphView graph = findViewById(R.id.graph);
// Set manual X bounds
graph.getViewport().setXAxisBoundsManual(true);
graph.getViewport().setMinX(0);
graph.getViewport().setMaxX(10);
// Set manual Y bounds
graph.getViewport().setYAxisBoundsManual(true);
graph.getViewport().setMinY(0);
graph.getViewport().setMaxY(1000);
// Set up the number of division for horizontal and vertical units
graph.getGridLabelRenderer().setNumHorizontalLabels(11);
graph.getGridLabelRenderer().setNumVerticalLabels(11);
PointsGraphSeries<DataPoint> series = new PointsGraphSeries<>();
series.setCustomShape(new PointsGraphSeries.CustomShape() {
@Override
public void draw(Canvas canvas,
Paint paint,
float x,
float y,
DataPointInterface dataPoint) {
canvas.drawRect(x, y - 100, x + 175, y, paint);
}
});
int[] points = {450, 512, 323, 240, 70, 790};
for (int i = 0; i < points.length; i++) {
addPoints(points[i], series);
}
graph.addSeries(series);
}
这将根据提供的要点为您提供以下图片: