同步图表或多个图表,例如 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,这样它就不会一次又一次地调用侦听器。如果未设置,则会导致死锁。
我们如何在 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,这样它就不会一次又一次地调用侦听器。如果未设置,则会导致死锁。