【问题标题】:How to draw ColorLine in TeeChart with DASH style?如何使用 DASH 样式在 TeeChart 中绘制 ColorLine?
【发布时间】:2015-02-12 17:33:58
【问题描述】:

我正在尝试在 Android(Java 版本)上的 TeeChart 中添加一个 ColorLine 工具。 一切正常,只是我无法使用 DASH 样式绘制线条。

这是我的代码 sn-p:

ColorLine closeLabelLine = new ColorLine(chart.getChart());
closeLabelLine.setValue(closeValue);
closeLabelLine.setAxis(chart.getAxes().getRight());
closeLabelLine.getPen().setStyle(DashStyle.DASH);  //Seems like no effect!
closeLabelLine.getPen().setColor(CLOSE_LABEL_COLOR);

我做错了什么?


更新:

通过设置 chart.setLayerType(View.LAYER_TYPE_SOFTWARE, null);closeLabelLine.setDraw3D(false); 测试 Yeray 的解决方案后,一切似乎都正常工作。但是在添加轴中断工具后,我遇到了以下异常:

java.lang.IllegalStateException: Underflow in restore
        at android.graphics.Canvas.native_restore(Native Method)
        at android.graphics.Canvas.restore(Canvas.java:497)
        at com.steema.teechart.android.Graphics3DAndroid.restore(Graphics3DAndroid.java:356)
        at com.steema.teechart.android.Graphics3DAndroid.unClip(Graphics3DAndroid.java:362)
        at com.steema.teechart.tools.AxisBreaksTool.drawRectangle(AxisBreaksTool.java:410)
        at com.steema.teechart.tools.AxisBreaksTool.doDrawLine(AxisBreaksTool.java:720)
        at com.steema.teechart.tools.AxisBreaksTool.chartEvent(AxisBreaksTool.java:748)
        at com.steema.teechart.Chart.broadcastToolEvent(Chart.java:1035)
        at com.steema.teechart.Chart.drawAllSeries(Chart.java:813)
        at com.steema.teechart.Chart.drawAxesSeries(Chart.java:802)
        at com.steema.teechart.Chart.internalDraw(Chart.java:782)
        at com.steema.teechart.Chart.paint(Chart.java:2169)
        at com.steema.teechart.Chart.paint(Chart.java:2185)
        at com.steema.teechart.TChart.onDraw(TChart.java:326)
        at android.view.View.draw(View.java:15114)
        at android.view.View.buildDrawingCache(View.java:14343)
        at android.view.View.updateDisplayListIfDirty(View.java:14029)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.View.draw(View.java:14838)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
        at android.view.View.updateDisplayListIfDirty(View.java:14043)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3388)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3367)
        at android.view.View.updateDisplayListIfDirty(View.java:14008)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3388)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3367)
        at android.view.View.updateDisplayListIfDirty(View.java:14008)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3388)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3367)
        at android.view.View.updateDisplayListIfDirty(View.java:14008)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3388)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3367)
        at android.view.View.updateDisplayListIfDirty(View.java:14008)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3388)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3367)
        at android.view.View.updateDisplayListIfDirty(View.java:14008)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3388)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3367)
        at android.view.View.updateDisplayListIfDirty(View.java:14008)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3388)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3367)
        at android.view.View.updateDisplayListIfDirty(View.java:14008)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3388)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3367)
        at android.view.View.updateDisplayListIfDirty(View.java:14008)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3388)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3367)
        at android.view.View.updateDisplayListIfDirty(View.java:14008)
        at android.view.View.getDisplayList(View.java:14071)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3388)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3367)

我发现chart.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 会导致图表正常工作,但 ColorLine 显示为实线,而不是所需的破折号。

【问题讨论】:

    标签: java android teechart


    【解决方案1】:

    有两个提示可以帮助您获得所需的结果:

    • 第一个注释thisthis。如果要绘制 DASH 线,则必须从 API 11 禁用硬件加速:

      if (Build.VERSION.SDK_INT>10)
          chart.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
      
    • 还要注意ColorLine 工具默认绘制侧面和背面。要禁用此功能并仅绘制前线:

      closeLabelLine.setDraw3D(false);
      

    更新:

    正如您在问题的更新部分中所说,使用建议的修复程序会在使用 AxisBreaksTool 时产生错误。
    实际上,我发现在剪辑某些内部函数时缺少对 canvas.save() 的一些调用,从而产生了这个和可能的其他崩溃。
    我已经在内部资源中添加了所需的调用,它在这里似乎对我来说很好。
    但是,我想不出一种解决方法让它在当前版本中工作,所以恐怕你必须等待下一个维护版本(你可以发送邮件到“steema dot com 的信息”要求测试释放)。


    更新 2:

    我最初修改了 TeeChart 源以在笔设置为 DASH 样式时在内部禁用硬件加速。但是setLayerTypeimplemented in API 11,所以为了保持 API 7 对 TeeChart 的支持,我不得不将其删除,并让开发人员在必要时执行此操作。

    【讨论】:

    • 我已经编辑了我的问题,其中添加了我遇到的异常。你能建议一个解决方法吗?
    • 谢谢你,@Yeray!您能说出下一个维护版本的计划日期吗?有订阅更新的选项吗?
    • 恐怕我无法告诉您下一个维护版本的发布日期。同时,正如我在回答中提到的,我们很乐意向您发送测试版本
    • 测试提供的维护版本后,我可以确认正确绘制了带有 DASH 样式的 ColorLine。谢谢你,@Yeray!
    猜你喜欢
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2023-03-22
    • 1970-01-01
    • 2021-05-03
    相关资源
    最近更新 更多