0

簡単なチャートを作成し、次のように onTouchListener を追加しました。

    @Override
    public boolean onTouch(View arg0, MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        if (mGraphPopup.isShowing()) {
            //close popup window
        } else {
            SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
            if (seriesSelection != null) {
              // open popupwindow
            }
        }
    return false;
}

そして、私は次のように実行することを期待していました:

1) チャートポイントをタップ - ポップアップを表示

2) どこでももう一度タップ - ポップアップを閉じる

しかし、実際に何が起こっているのですか:

1*) チャート ポイントをタップ: 何も起こらない - seriesSelection が null であるため

2*) 任意のチャート ポイントから離れた場所でもう一度タップします - seriesSelection は有効で、ステップ 1*) でクリックされたポイントのデータを読み込みます

ワンタッチイベントでチャートが遅れているようです。

getCurrentSeriesAndPoint() を 2 回呼び出そうとしましたが、結果はありませんでした。

4

2 に答える 2

1

私も最近この問題に遭遇しましたが、それを解決するための解決策を見つけました.おそらくあなたは問題を解決したでしょう.私はまた、将来この問題に遭遇する他の人を助けるためにそれに答えます.ここに解決策があります:

       paintBarView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            paintBarView.onTouchEvent(event);

これは重要なコードです `paintBarView.onTouchEvent(event); このコードは、ビューが入力を取得することを確認するためのものであり、次のように解決することもできます:

try {
                                Field fieldX = paintBarView.getClass().getDeclaredField("oldX");
                                Field fieldY = paintBarView.getClass().getDeclaredField("oldY");
                                fieldX.setAccessible(true);
                                fieldY.setAccessible(true);
                                fieldX.set(paintBarView, event.getX());
                                fieldY.set(paintBarView, event.getY());
                            } catch (NoSuchFieldException e) {
                                e.printStackTrace();
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            } catch (SecurityException e) {
                                e.printStackTrace();
                            } catch (IllegalArgumentException e) {
                                e.printStackTrace();
                            }
                            SeriesSelection ss  =   paintBarView.getCurrentSeriesAndPoint();

それを解決するためのこの2つの解決策は、他の人を助けることができることを願っています

于 2015-08-17T02:47:47.153 に答える