Java AchartEngine获取接触点的位置

Java AchartEngine获取接触点的位置,java,android,achartengine,Java,Android,Achartengine,我用阿卡廷金画了一个折线图。我使用此代码来选择当前点 `view.setOnClickListener(新的view.OnClickListener(){ 公共void onClick(视图v){ //处理图表上的单击事件 quickAction.show(v); SeriesSelection seriesSelection = view.getCurrentSeriesAndPoint(); if (seriesSele

我用阿卡廷金画了一个折线图。我使用此代码来选择当前点 `view.setOnClickListener(新的view.OnClickListener(){ 公共void onClick(视图v){ //处理图表上的单击事件

            quickAction.show(v);
            SeriesSelection seriesSelection = view.getCurrentSeriesAndPoint();
            if (seriesSelection != null) {
                if(mToast == null){
                    Toast.makeText( mContext  , "" , Toast.LENGTH_SHORT );
                }
                mToast.setText( "" + seriesSelection.getValue() + "mg/dL");
                mToast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
                mToast.show();
            } else {
                Log.i(this.toString(), "OnClickListener" + v.getX() + "y:" + v.getY());
            }
        }
    });`
现在我想得到这个点的位置或者触摸的位置来显示一个气泡来显示细节点,有什么帮助吗 例如

你试过这个吗

SeriesSelection seriesSelection = view.getCurrentSeriesAndPoint();
double[] xy = view.toRealPoint(0); 
Log.i(this.toString(), "OnClickListener" + xy[0] + "y:" + xy[1]);
或者最好看看示例行:167-172

编辑 好的,对于数据集中的每个点,尝试以下操作:

  • 将真实点转换为屏幕点
  • 计算距离触摸事件的距离
  • 如果距离小于指定的量 (本例中为2*pointSize)然后获取值并显示弹出窗口
  • 我不喜欢的是,在最坏的情况下,你必须迭代所有的点…但我希望这会给你一些提示

    final XYChart chart = new LineChart(mDataset, mRenderer);
    mChartView = new GraphicalView(this, chart);
    mChartView.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
         XYSeries series = mDataset.getSeriesAt(0);
         for(int i = 0; i < series.getItemCount(); i++) {
           double[] xy = chart.toScreenPoint(new double[] { series.getX(i), series.getY(i) }, 0);
           
           double dx = (xy[0] - event.getX());
           double dy = (xy[1] - event.getY());
           double distance = Math.sqrt(dx*dx + dy*dy);
           if (distance <= 2*pointSize) {  //.pointSize that you've specified in your renderer
              SeriesSelection sel = 
                chart.getSeriesAndPointForScreenCoordinate(new Point((float)xy[0], (float)xy[1]));
              if (sel != null) {
                 Toast.makeText(XYChartBuilder.this, "Touched: " + sel.getValue(), Toast.LENGTH_SHORT).show();
              }
              break;
           }
           Log.i("LuS", "dist: " + distance);
         }
            
         return true;
      }
    });
    
    final XYChart chart=新折线图(mDataset,mrender);
    mChartView=新图形视图(此,图表);
    mChartView.setOnTouchListener(新视图.OnTouchListener(){
    @凌驾
    公共布尔onTouch(视图v,运动事件){
    XYSeries系列=mDataset.getSeriesAt(0);
    对于(int i=0;i如果(距离感谢Lus,我也解决了我的问题:

    final LineChart chart = new LineChart(buildDataset(mTitles, data), mRenderer);
    final GraphicalView view = new GraphicalView(mContext, chart);
    view.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
         double[] xy = chart.toScreenPoint(view.toRealPoint(0));
         int[] location = new int[] {(int) xy[0], (int) xy[1]};
         SeriesSelection seriesSelection = view.getCurrentSeriesAndPoint();
         if (seriesSelection != null) {
             final Data d = mModel.getDiaryAt(seriesSelection.getSeriesIndex(), 
             seriesSelection.getPointIndex());
             //show popup at xy[0] xy[1]
         }
      }
    

    })

    这是我的代码,用于获取在折线图上单击的绘图位置。它对我有效。我正在单击点的位置上显示文本

    final XYChart chart = new LineChart(mDataset, mRenderer);
    mChartView = new GraphicalView(this, chart);
    SeriesSelection ss=mChartView.getCurrentSeriesAndPoint();
    double x=ss.getPointIndex()// index of point in chart ex: for first point its 1,for 2nd its 2.
    double y=ss.getValue(); //value of y axis
    double[] xy = chart.toScreenPoint(new double[] {x, y });
    // so now xy[0] is yout x location on screen and xy[1] is y location on screen.
    

    我只是在单击时引用了您的链接句柄。我也尝试了view.ToralPoint(0),但它似乎返回了错误的值,因为它对同一点的每次触摸都返回不同的值。@AnhVu请查看编辑,希望这将对您有所帮助。@AnhVu欢迎您!如果这解决了您的问题,请您接受答案,好吗(也适用于其他将搜索相同功能的用户)谢谢!:-)很高兴听到这个消息!:-)…是的,我也会查看更多系列。我发现这一点,因为在onTouch侦听器中获取图形视图的getCurrentSeriesAndPoint时遇到类似问题。当我发现您的解决方案时,我很高兴,但它将npe用于调用chart.toScreenPoint,即使我的图表和系列都有效。有什么想法吗?我很失望ate;-)