我希望在触摸图表区域的位置显示垂直光标.与此行关联的文本视图将显示该栏的值,其中的点的y轴值.当我将手指向左移动同时保持我的手指向下[左移或右移]时,此垂直光标将相应地移动,并且文本视图也会跟随,但在此处显示y轴值.移动时的新位置.
我看到GraphicalView有一个touchlistener,我可以注册以获得回调 - 但我从此以后如何使用它是无能为力的.我可以设法将touchevent与某种gesturelistener联系起来.但是,如何绘制叠加在当前图表顶部的垂直光标线?
我有的其他问题是,在onTuuch中返回一个true时我无法获取mChart.getCurrentSeriesAndPoint()的值; ,总是返回Null,但如果我将返回值更改为False,我可以获取值,但我无法再次访问ontuch.
这是我的代码
mChart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_CANCEL) {
dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
multiRenderer.setPanEnabled(false);
multiRenderer.setZoomEnabled(false);
SeriesSelection seriesSelection = mChart.getCurrentSeriesAndPoint();
if(seriesSelection != null)
{
Toast.makeText(
getActivity().getBaseContext(),"Hola",
Toast.LENGTH_SHORT).show();
}
XYSeries Line = new XYSeries("");
Line.add(event.getX()/1.5,minValue);
Line.add(event.getX()/1.5,maxValue);
dataset.addSeries(Line);
multiRenderer.addSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
XYSeries Line = new XYSeries("");
Line.add(event.getX()/1.5,minValue);
Line.add(event.getX()/1.5,maxValue);
dataset.addSeries(Line);
multiRenderer.addSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_UP) {
dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
}
mChart.repaint();
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
我想完全这样.
dwef http://s2.subirimagenes.com/imagen/previo/thump_82994131.png 我需要帮助!
编辑:这是我的onTouch代码,当我返回True; 在onTouch中,来自toRealPoint()的值; 并且SeriesSelection不正确,如果我将true更改为false,我可以获得实际值.请帮忙
mChart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
SeriesSelection seriesSelection = mChart.getCurrentSeriesAndPoint();
double[]values = mChart.toRealPoint(0);
if(seriesSelection != null)
{
if (event.getAction() == MotionEvent.ACTION_CANCEL) {
dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
XYSeries Line = new XYSeries("");
Line.add(seriesSelection.getXValue(),minValue);
Line.add(seriesSelection.getXValue(),maxValue);
dataset.addSeries(Line);
multiRenderer.addSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
XYSeries Line = new XYSeries("");
Line.add(seriesSelection.getXValue(),minValue);
Line.add(seriesSelection.getXValue(),maxValue);
dataset.addSeries(Line);
multiRenderer.addSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_UP) {
dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
}
}
mChart.repaint();
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
为了绘制垂直光标,您必须在图表中添加一系列额外的垂直点。
它将chart.getCurrentSeriesAndPoint()返回您在可选缓冲区下最接近您触摸屏幕的点的内容。因此,您需要触摸屏幕靠近现有点,这样它就会给您返回一些东西。但是,您可以将可选缓冲区设置为您想要的任何值:
renderer.setSelectableBuffer(100);
Run Code Online (Sandbox Code Playgroud)
为了监听图表上的触摸事件,请像这样注册:
chartView.setOnClickListener(...);
Run Code Online (Sandbox Code Playgroud)
对于一些工作代码,请查看官方 AChartEngine 演示,这篇文章会对您有所帮助。
更新:另一种选择必须自己处理触摸并搜索该系列以找到最近的点。您可以用来chartView.toRealPoint()从屏幕点检索真实数据点。
| 归档时间: |
|
| 查看次数: |
2429 次 |
| 最近记录: |