- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Graphview 并且工作正常,但现在我遇到了问题。
我想为添加到图表中的每个系列提供背景,而不是为所有系列提供背景
这可能吗?
最佳答案
目前(2014 年 8 月 5 日)这在 the original GraphView library 上是不可能的.
我需要这个功能,所以我 fork 了这个库并自己实现了这个功能。您可以在我的分支的 feature/series_specific_styles
分支上找到更新的代码:
希望将来这些更改会被拉入原始库。
实际的代码改动比较简单。
向 GraphViewSeries.GraphViewSeriesStyle
更新了 LineGraphView.drawSeries()
以查找这些字段,而不是依赖其自身的内部值。
我在下面包含了完整的更新,但查看它们的最简单方法是在提交页面上:
这是更新后的 GraphViewSeriesStyle
类:
static public class GraphViewSeriesStyle {
public int color = 0xff0077cc;
public int thickness = 3;
private ValueDependentColor valueDependentColor;
private final Paint paintBackground;
private boolean drawBackground;
private boolean drawDataPoints;
private float dataPointsRadius = 10f;
public GraphViewSeriesStyle() {
super();
paintBackground = new Paint();
paintBackground.setColor(Color.rgb(20, 40, 60));
paintBackground.setStrokeWidth(4);
paintBackground.setAlpha(128);
}
public GraphViewSeriesStyle(int color, int thickness) {
super();
this.color = color;
this.thickness = thickness;
paintBackground = new Paint();
paintBackground.setColor(Color.rgb(20, 40, 60));
paintBackground.setStrokeWidth(4);
paintBackground.setAlpha(128);
}
public ValueDependentColor getValueDependentColor() {
return valueDependentColor;
}
/**
* the color depends on the value of the data.
* only possible in BarGraphView
* @param valueDependentColor
*/
public void setValueDependentColor(ValueDependentColor valueDependentColor) {
this.valueDependentColor = valueDependentColor;
}
public boolean getDrawBackground() {
return drawBackground;
}
public void setDrawBackground(boolean drawBackground) {
this.drawBackground = drawBackground;
}
public Paint getPaintBackground() {
return paintBackground;
}
public int getBackgroundColor() {
return paintBackground.getColor();
}
/**
* sets the background colour for the series. This is not the background
* colour of the whole graph.
*/
public void setBackgroundColor(int color) {
paintBackground.setColor(color);
}
public float getDataPointsRadius() {
return dataPointsRadius;
}
public boolean getDrawDataPoints() {
return drawDataPoints;
}
/**
* sets the radius of the circles at the data points.
* @see #setDrawDataPoints(boolean)
* @param dataPointsRadius
*/
public void setDataPointsRadius(float dataPointsRadius) {
this.dataPointsRadius = dataPointsRadius;
}
/**
* You can set the flag to let the GraphView draw circles at the data points
* @see #setDataPointsRadius(float)
* @param drawDataPoints
*/
public void setDrawDataPoints(boolean drawDataPoints) {
this.drawDataPoints = drawDataPoints;
}
}
这是更新后的 LineGraphView.drawSeries()
方法:
public void drawSeries(Canvas canvas, GraphViewDataInterface[] values, float graphwidth, float graphheight, float border, double minX, double minY, double diffX, double diffY, float horstart, GraphViewSeriesStyle style) {
// draw background
double lastEndY = 0;
double lastEndX = 0;
// draw data
paint.setStrokeWidth(style.thickness);
paint.setColor(style.color);
Path bgPath = null;
if ((drawBackground) || (style.getDrawBackground())) {
bgPath = new Path();
}
lastEndY = 0;
lastEndX = 0;
float firstX = 0;
for (int i = 0; i < values.length; i++) {
double valY = values[i].getY() - minY;
double ratY = valY / diffY;
double y = graphheight * ratY;
double valX = values[i].getX() - minX;
double ratX = valX / diffX;
double x = graphwidth * ratX;
if (i > 0) {
float startX = (float) lastEndX + (horstart + 1);
float startY = (float) (border - lastEndY) + graphheight;
float endX = (float) x + (horstart + 1);
float endY = (float) (border - y) + graphheight;
// draw data point
if (drawDataPoints) {
//fix: last value was not drawn. Draw here now the end values
canvas.drawCircle(endX, endY, dataPointsRadius, paint);
} else if (style.getDrawDataPoints()) {
canvas.drawCircle(endX, endY, style.getDataPointsRadius(), paint);
}
canvas.drawLine(startX, startY, endX, endY, paint);
if (bgPath != null) {
if (i==1) {
firstX = startX;
bgPath.moveTo(startX, startY);
}
bgPath.lineTo(endX, endY);
}
} else if ((drawDataPoints) || (style.getDrawDataPoints())) {
//fix: last value not drawn as datapoint. Draw first point here, and then on every step the end values (above)
float first_X = (float) x + (horstart + 1);
float first_Y = (float) (border - y) + graphheight;
if (drawDataPoints) {
canvas.drawCircle(first_X, first_Y, dataPointsRadius, paint);
} else if (style.getDrawDataPoints()) {
canvas.drawCircle(first_X, first_Y, style.getDataPointsRadius(), paint);
}
}
lastEndY = y;
lastEndX = x;
}
if (bgPath != null) {
// end / close path
bgPath.lineTo((float) lastEndX, graphheight + border);
bgPath.lineTo(firstX, graphheight + border);
bgPath.close();
if (style.getDrawBackground()) {
canvas.drawPath(bgPath, style.getPaintBackground());
} else {
canvas.drawPath(bgPath, paintBackground);
}
}
}
感兴趣的是,该分支还允许为每个系列配置数据点 - 此处可见代码更改:
关于android - 每个系列的背景 GraphView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20753332/
请帮助我,我使用 GraphView 库( http://www.jjoe64.com/p/graphview-library.html ),它有效。但我不明白如何重置以前的数据。 方法redrawA
可以使折线图更平滑吗?如果我的数据在图表上没有多少点? 最佳答案 您可以尝试先平滑数据,例如使用 Savitzky Golay 过滤器,然后将其发送到 GraphView。 可以在此处找到此过滤器的示
我有以下代码: LineGraphSeries series = new LineGraphSeries<>(arr); graphView.addSeries(ser
我使用 Graphview 并且工作正常,但现在我遇到了问题。 我想为添加到图表中的每个系列提供背景,而不是为所有系列提供背景 这可能吗? 最佳答案 目前(2014 年 8 月 5 日)这在 the
我正在开发一个应用程序,它通过 XML 文件进行解析,收集日期和值,并使用 GraphView 使用循环遍历的 for 循环和数据点数组列表绘制此数据。我可以获得图表以生成具有日期和值范围的 x 轴和
提前抱歉,这是我的第一篇文章。所以我想做的是每隔一个栏设置不同的颜色。我所看到的是,您可以使用 根据 y 值更改颜色 setValueDependentColor 不知道我应该怎么做。 BarGra
我正在使用 Graph View在我正在开发的应用程序中绘制我的条形图,并且在纵向模式下一切正常。但是,当更改为横向时,图表的标签与数据点不一致,如下图所示: 肖像: 横向: 如您所见,标签与条形图未
我一直在使用 Graphview 库,它非常适合我的简单图表。但是关于这个库的信息真的不多,我想知道如何删除一个系列。 我正在刷新来自微调器的数据,但他们只是在图表上添加了一条新线,所以我必须先清除它
我在 android 中使用 GraphView 绘制实时数据。这样做的问题是会生成很多值。因此,整个应用程序往往会变得非常非常慢。有什么办法可以清除不在视口(viewport)中的数据/值吗?我真的
我正在使用 GraphView 在我的 Android 应用程序中绘制图形,但我无法在 X 轴和 Y 轴上设置轴标签来表示它们所代表的内容。我检查了文档,但找不到任何有用的东西。我该怎么做? 最佳答案
我目前正在尝试在 Android 应用程序中绘制图形。我找到的库称为 GraphView (http://www.jjoe64.com/p/graphview-library.html)。我目前使用的
我正在开发一个使用 GraphView 的应用程序。用户可以缩放图形(放大、缩小),并且可以使用“重置缩放”按钮重置为打开图形时获得的默认 View 。我让它工作了,但是当我按下按钮时图表没有更新。只
我正在尝试将 Android GraphView 项目合并到我的应用程序中,但我一直遇到一些奇怪的问题。 我的应用需要根据实时数据绘制图表。我有线程与提供数据的所有通信。在主线程中,我正在读取此数据并
我正在使用 GraphView 库在我的 Android 应用程序上创建图表,但我的水平 (X) 轴标签有问题。如您所见here X 轴中的数字标签存在问题,数字彼此悬停,我愿意使用填充来避免这种情况
我正在尝试使用 GraphView 库绘制图形。我的问题是,x 轴没有显示,但 y 轴可以。此外,x 轴标签处的值也未显示。 这是我的 xml 文件: 和java代码: double gra
我想要一条虚线,如 the official documentation 中所述: futureSeries.setDrawDataPoints(true); Paint paint
我创建了一个线图,它看起来像这样: 但我想像这样填充图形下方的区域: 如何实现此功能?你能帮帮我吗? 最佳答案 使用setDrawBackground 方法启用它。 LineGraphView gra
GraphView Android 库有一个 GraphView 类,它是一个用于创建图形的 View 。这个抽象类扩展了 LinearLayout,因此您可以通过嵌套 LinearLayouts 在
我有一个 GraphView,它在添加新数据时不会更新,它会更改 Y 值以适应新数据,但不会绘制它们,代码如下: public class MainActivity extends Activity
所以我一直在尝试使用GraphView。我已将其导入到我的依赖项中,但由于某种原因,我收到依赖项解析错误。这是我的 app/build.gradle apply plugin: 'com.androi
我是一名优秀的程序员,十分优秀!