我们怎样才能在Synchronized charts
中实现Android
。
对于我的网页,我使用了Highcharts
API。 Android有什么类似的东西吗?我检查过各种提到的here库,但没有找到符合要求的库。
我不想要像this和this这样的组合图表。我正在寻找同步图表。
是否有符合要求的图书馆或我应该使用webView
(这对我来说是最糟糕的情况)
是否可以使用MPAndroidChart
?
修改:
结果图表应该与highcharts页面
中给出的图表类似示例:
更新
座右铭不只是绘制3个图表。目标是同步它们。同步意味着所有3个图表具有相同的x轴(值),在这些图表中的任意点单击时,应在所有图表中突出显示该特定点的图表。我确定我没有正确解释。请检查此link并将图表悬停
答案 0 :(得分:2)
点击图表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,以便它不会一次又一次地调用侦听器。如果未设置,则会导致死锁。
答案 1 :(得分:1)
sample app可以很好地展示您可以使用的功能"开箱即用"与MPAndroidChart。
正如您所看到的,ListView中有多个图表的示例似乎接近您的要求。
同样,GitHub上提供了source code,供您检查并查看它是否具有可用的类和方法,以便您开箱即用。
与此同时,您应该明白,期望找到一个完全符合仅仅配置的不寻常要求的库通常是不现实的。免费和开源库通常提供扩展和定制,MPAndroidChart也不例外。作为一名专业的软件工程师,或者作为一名有抱负的软件工程师,您应该愿意并准备自己编程。
在您的特定情况下,您似乎想要在图表之间进行某种协调。因此,如果单击其中一个,则MarkerView
将出现在DataSet中相同的xIndex上。
要尝试此操作,您首先要查看OnChartGestureListener
的代码。可以使用event-driven programming获得解决方案。您将设置3个OnChartGestureListener
实现,这些实现将使用事件将当前手势传输给中介,然后中介在其他两个图表上触发相同的手势。例如,在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
内的性能不如使用直接渲染画布的库那样好。
简而言之,可能,虽然很难,但要使用MPAndroidChart
完成您想要的任务,而不是#34;开箱即用的"解决方案可用。
答案 2 :(得分:-1)
您肯定可以使用MPAndroidCharts库。
转到1> 速度的LineChart(带图例,简单设计) 2 - ; 海拔,心脏
的LineChart(立方线)/(渐变填充)使用gradientFill时,应用此选项消除虚线并画一条直线:
lineDataSet.enableDashedLine(0f, 0f, 0f);
lineDataSet.enableDashedHighlightLine(0f, 0f, 0f);