在aChartEngine中画一条线

Sai*_*zar 5 achartengine

我希望在触摸图表区域的位置显示垂直光标.与此行关联的文本视图将显示该栏的值,其中的点的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)

Dan*_* D. 1

为了绘制垂直光标,您必须在图表中添加一系列额外的垂直点。

它将chart.getCurrentSeriesAndPoint()返回您在可选缓冲区下最接近您触摸屏幕的点的内容。因此,您需要触摸屏幕靠近现有点,这样它就会给您返回一些东西。但是,您可以将可选缓冲区设置为您想要的任何值:

renderer.setSelectableBuffer(100);
Run Code Online (Sandbox Code Playgroud)

为了监听图表上的触摸事件,请像这样注册:

chartView.setOnClickListener(...);
Run Code Online (Sandbox Code Playgroud)

对于一些工作代码,请查看官方 AChartEngine 演示,这篇文章会对您有所帮助。

更新:另一种选择必须自己处理触摸并搜索该系列以找到最近的点。您可以用来chartView.toRealPoint()从屏幕点检索真实数据点。