使用 GraphView 制作条形图
Making bars with GraphView
我已经使用 Graphview
一段时间了,主要是 LineGraph
和 PointGraph
,link 到 GraphView
可以在这里找到:Link to GraphView.
但现在我需要一个 LineGraph
可以在需要时填充整个 0-100 和 100-200。例如,当点为 70 时,它将填充整个 0-100 space,看起来像这样。
另一个要求是它仍然需要像 LineGraph
因为它需要能够向右移动。
有没有人知道如何使用 GraphView
完成此操作,或者是否可以使用 GraphView
.
完成此操作
或者,如果我将点设置为 50 并将线宽设置为正好覆盖 +/- 50,那么它也会是相同的,但这里的问题是线宽在每个屏幕上都不同。
您可以为 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);
}
这将根据提供的点为您提供以下图片:
我已经使用 Graphview
一段时间了,主要是 LineGraph
和 PointGraph
,link 到 GraphView
可以在这里找到:Link to GraphView.
但现在我需要一个 LineGraph
可以在需要时填充整个 0-100 和 100-200。例如,当点为 70 时,它将填充整个 0-100 space,看起来像这样。
另一个要求是它仍然需要像 LineGraph
因为它需要能够向右移动。
有没有人知道如何使用 GraphView
完成此操作,或者是否可以使用 GraphView
.
或者,如果我将点设置为 50 并将线宽设置为正好覆盖 +/- 50,那么它也会是相同的,但这里的问题是线宽在每个屏幕上都不同。
您可以为 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);
}
这将根据提供的点为您提供以下图片: