5

グラフ領域に触れた場所に垂直カーソルを表示したいと思います。この行に関連付けられている textview は、棒の値とその中の点の y 軸の値を表示します。指を下げたまま指を右の左に移動すると[左に移動または右に移動]、この垂直カーソルはそれに応じて移動し、テキストビューも追従しますが、y軸の値を表示します移動に伴う新しい場所。

GraphicalView には、コールバックを取得するために登録できる touchlistener があることがわかりますが、その時点からそれを使用する方法がわかりません。touchevent をある種のジェスチャリスナーに関連付けることもできます。しかし、オーバーレイが現在のチャートの上に表示される垂直カーソル線を描画するにはどうすればよいですか?

私が持っている他の問題は、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;
               }
            });

私はまさにこれが欲しいです。

ドウェフ
(ソース: subirimagenes.com )

助けてください!

編集:これは、True を返すときの onTouch コードです。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;
               }
            });
4

2 に答える 2

1

垂直カーソルを描画するには、チャートに追加の一連の垂直ポイントを追加する必要があります。

は、選択可能なバッファの下で画面に触れたポイントに最もchart.getCurrentSeriesAndPoint()近いものを返します。そのため、何かを返すなど、既存のポイントの近くで画面をタッチする必要があります。ただし、選択可能なバッファを任意の値に設定できます。

renderer.setSelectableBuffer(100);

チャートでタッチ イベントをリッスンするには、次のように登録します。

chartView.setOnClickListener(...);

動作するコードについては、公式の AChartEngine デモを確認してください。この記事が役に立ちます。

更新:別のオプションでは、タッチを自分で処理し、シリーズを検索して最も近いポイントを見つける必要があります。を使用chartView.toRealPoint()して、スクリーン ポイントから実際のデータ ポイントを取得できます。

于 2013-02-14T18:16:28.353 に答える