achartengine - 如何绘制带有点但之间没有线的图表引擎时间序列?

标签 achartengine

我目前通过将 XYSeriesRenderer 颜色设置为白色来模拟此功能:

    final XYSeriesRenderer goodEventSeriesRenderer = new XYSeriesRenderer();
    goodEventSeriesRenderer.setColor(Color.WHITE);
    goodEventSeriesRenderer.setPointStyle(PointStyle.POINT);
    goodEventSeriesRenderer.setShowLegendItem(false);
    goodEventSeriesRenderer.setAnnotationsTextSize(textSize + 2);
    goodEventSeriesRenderer.setAnnotationsColor(Color.GREEN);

我尝试调用 setLineWidth(0),它通常在其他图形系统中工作以缩小线条,但它只是返回点之间的细线。

那么我如何获得一个时间序列图表,其中一些 TimeSeries 在它们的点之间有线,而有些则没有?我使用编译到我的程序中的 achartengine 运行,而不是来自 jar 文件,所以请随时帮助我破解源代码。

最佳答案

以下是 AChartEngine 允许 .setLineWidth(0) 压缩线条的不同之处:

--- a/app/src/main/java/org/achartengine/chart/AbstractChart.java
+++ b/app/src/main/java/org/achartengine/chart/AbstractChart.java
@@ -302,6 +302,7 @@ public abstract class AbstractChart implements Serializable {
     Path path = new Path();
     int height = canvas.getHeight();
     int width = canvas.getWidth();
+    float strokeWidth = paint.getStrokeWidth();

     float[] tempDrawPoints;
     if (points.size() < 4) {
@@ -310,7 +311,10 @@ public abstract class AbstractChart implements Serializable {
     tempDrawPoints = calculateDrawPoints(points.get(0), points.get(1), points.get(2),
         points.get(3), height, width);
     path.moveTo(tempDrawPoints[0], tempDrawPoints[1]);
-    path.lineTo(tempDrawPoints[2], tempDrawPoints[3]);
+    if (strokeWidth > 0.0f)
+      path.lineTo(tempDrawPoints[2], tempDrawPoints[3]);
+    else
+      path.moveTo(tempDrawPoints[2], tempDrawPoints[3]);

     int length = points.size();
     for (int i = 4; i < length; i += 2) {
@@ -323,7 +327,10 @@ public abstract class AbstractChart implements Serializable {
       if (!circular) {
         path.moveTo(tempDrawPoints[0], tempDrawPoints[1]);
       }
-      path.lineTo(tempDrawPoints[2], tempDrawPoints[3]);
+      if (strokeWidth > 0.0)
+        path.lineTo(tempDrawPoints[2], tempDrawPoints[3]);
+      else
+        path.moveTo(tempDrawPoints[2], tempDrawPoints[3]);
     }
     if (circular) {
       path.lineTo(points.get(0), points.get(1));
diff --git a/app/src/main/java/org/achartengine/chart/LineChart.java b/app/src/main/java/org/achartengine/chart/LineChart.java
index 55365e3..be0937b 100644
--- a/app/src/main/java/org/achartengine/chart/LineChart.java
+++ b/app/src/main/java/org/achartengine/chart/LineChart.java
@@ -81,7 +81,8 @@ public class LineChart extends XYChart {
   public void drawSeries(Canvas canvas, Paint paint, List<Float> points, XYSeriesRenderer renderer,
       float yAxisValue, int seriesIndex, int startIndex) {
     float lineWidth = paint.getStrokeWidth();
-    paint.setStrokeWidth(renderer.getLineWidth());
+    float lineWidth1 = renderer.getLineWidth();
+    paint.setStrokeWidth(lineWidth1);
     final FillOutsideLine[] fillOutsideLine = renderer.getFillOutsideLine();

     for (FillOutsideLine fill : fillOutsideLine) {
@@ -227,8 +228,13 @@ public class LineChart extends XYChart {
   public void drawLegendShape(Canvas canvas, SimpleSeriesRenderer renderer, float x, float y,
       int seriesIndex, Paint paint) {
     float oldWidth = paint.getStrokeWidth();
-    paint.setStrokeWidth(((XYSeriesRenderer) renderer).getLineWidth());
-    canvas.drawLine(x, y, x + SHAPE_WIDTH, y, paint);
+    float lineWidth = ((XYSeriesRenderer) renderer).getLineWidth();
+
+    if (lineWidth > 0.0) {
+      paint.setStrokeWidth(lineWidth);
+      canvas.drawLine(x, y, x + SHAPE_WIDTH, y, paint);
+    }
+
     paint.setStrokeWidth(oldWidth);
     if (isRenderPoints(renderer)) {
       pointsChart.drawLegendShape(canvas, renderer, x + 5, y, seriesIndex, paint);

关于achartengine - 如何绘制带有点但之间没有线的图表引擎时间序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57797024/

相关文章:

java - 设计图表时在 android AchartEngine 中使用 textlables

android - 如何使用Achartengine实现折线图

android - 从 CSV 文件中调用 aGraphEngine (Android) 的值

android - 绘制动态图表以显示声音的分贝数

Android:如何基于图表引擎库在绘图轴中创建负值?

android - 条形图 achartengine 未显示图表值

java - ChartView 在 ViewPager/ScrollView 中被挤压/变形

android - 需要帮助定位和 margin 图表引擎

android - 绘图点与图表引擎中的 X 轴计数无关

java - 如何使用 achartengine 在 android 中创建条形图以及动态值和静态值