【问题标题】:how to draw an achartengine TimeSeries with points but no lines between them?如何绘制一个带有点但它们之间没有线的 achartengine TimeSeries?
【发布时间】:2019-09-05 00:27:55
【问题描述】:

我目前通过将 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),它通常在其他图形系统中工作以缩小线条,但这只是返回点之间的细线。

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

【问题讨论】:

    标签: achartengine


    【解决方案1】:

    以下是 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-23
      • 2015-07-27
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 2013-11-02
      • 2022-01-19
      • 2018-12-19
      相关资源
      最近更新 更多