同步图表或多个图表,例如 Android 中的 Highcharts

Synchronized charts or multiple charts like Highcharts in Android

我们如何在 Android 中实现 Synchronized charts

对于我的网页,我使用了 Highcharts API。 Android有没有类似的东西。我检查了提到的各种库 here,但没有找到符合要求的库。

我不想要 this and 这样的组合图表。我正在寻找同步图表。

是否有任何图书馆可以满足要求,或者我应该选择 webView(这对我来说是最糟糕的情况)

MPAndroidChart可以吗?

编辑:

生成的图表应该与 highcharts 页中给出的图表类似

示例:

更新

座右铭不只是画3张图表。目的是使它们同步。同步意味着所有 3 个图表都具有相同的 x 轴(值),单击这些图表中的任意点时,该特定点的图应在所有图表中突出显示。我确定我没有正确解释它。请检查此 link 并将鼠标悬停在图表

你肯定可以使用 MPAndroidCharts 库。

选择 1> 折线图(带图例,设计简单)速度 2> Elevation,Heart

的折线图(立方线)/(渐变填充)

在使用 gradientFill 时应用它来消除虚线并画一条直线:

    lineDataSet.enableDashedLine(0f, 0f, 0f);
    lineDataSet.enableDashedHighlightLine(0f, 0f, 0f);

sample app 很好地展示了 MPAndroidChart "out of the box" 可用的功能。

如您所见,ListView 中有多个图表的示例,这似乎接近您的要求。

同样,source code 在 GitHub 上可用,您可以检查它是否有可用的 类 和方法,让您开箱即用.

同时,您应该明白,仅凭配置就期望找到一个完全适合不寻常需求的库通常是不现实的。免费和开源库通常提供扩展和自定义功能,MPAndroidChart 也不例外。作为一名专业的软件工程师,或者作为一个有抱负的人,您应该愿意并准备好自己进行编程。

在您的特定情况下,您似乎需要图表之间的某种协调。因此,如果您单击其中之一,则 MarkerView 会出现在数据集中的同一 xIndex 上。

要尝试这样做,您可以先查看 OnChartGestureListener. A solution can be obtained through using event-driven programming 的代码。您将设置 OnChartGestureListener 的 3 个实现,它们将使用事件将当前手势传输到调解器,调解器随后在其他两个图表上触发相同的手势。例如,在 OnChartGestureListener 里面有一个实现方法叫做:

void onChartScale(MotionEvent var1, float var2, float var3);

您的实现看起来像这样:

@Override
void onChartScale(MotionEvent var1, float var2, float var3) {
    //transmit event to mediator 
    //handle event for this chart
}

如果这太难了,那么您将不得不坚持使用 WebView 中的 Highcharts,正如您中肯地建议自己的那样。但是,请注意 WebView 内部的性能不如使用直接渲染到 canvas 的库。

简而言之,可能,尽管很困难,但是使用MPAndroidChart来完成你想要的,并且没有"out-of-the-box"可用的解决方案。

在图表 1 上单击时获取 X 和 Y 点并在图表 2 上突出显示它们。与第二个图表相同。

    lineChart1.setOnChartValueSelectedListener(new OnChartValueSelectedListener()
    {
        @Override
        public void onValueSelected(Entry e, Highlight h)
        {
            lineChart2.highlightValue(e.getX(),e.getY(),0,false);
        }

        @Override
        public void onNothingSelected()
        {
        }
    });


    lineChart2.setOnChartValueSelectedListener(new OnChartValueSelectedListener()
    {
        @Override
        public void onValueSelected(Entry e, Highlight h)
        {
            lineChart1.highlightValue(e.getX(),e.getY(),0,false);
        }

        @Override
        public void onNothingSelected() {
        }
    });

注意 将最后一个参数设置为 false,这样它就不会一次又一次地调用侦听器。如果未设置,则会导致死锁。