Как прослушать сенсорные события в GraphView?

Мне нужно добавить в свою программу поведение, связанное с панорамированием / масштабированием пользователя в GraphView. Я пытаюсь зарегистрироваться для событий движения, чтобы получать уведомления об этом, поэтому я могу сделать что-то, поскольку пользователь манипулирует графиком с помощью касания.

Я попытался переопределить OnTouchEvent и реализовать OnTouchLIstener в подклассе LineGraph. Я также попытался сделать это во фрагменте / представлении, в котором я помещаю GraphView. Тем не менее, мои методы никогда не вызываются, но график позволяет панорамирование / масштабирование, как и раньше.

например:

public CustomLineGraphView(Context context, String title) {
    super(context, title);
    this.setOnTouchListener(this);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    Log.w("clg", "onTouchEvent()");
    return true;
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    Log.w("clg", "onTouch()");
    return false;
}

1 ответ

Решение

Вам нужно подключиться к основному View тот GraphView использует.

Предполагая, что у вас есть объект GraphView, созданный с именем m_graphView, выполните следующие действия. Вероятно, безопаснее всего прикрепить onTouchListener к каждому нижележащему дочернему элементу, если в будущем будут реализованы изменения в GraphView.

// attach OnTouchListener to the inner view that receives touch events for pan/zoom.
int childCount = m_graphView.getChildCount();
for(int index = 0; index < childCount; index++) {
   m_graphView.getChildAt(index).setOnTouchListener(new GraphTouchListener());
}

Обязательно верните false в onTouch(), чтобы поведение панорамирования / масштабирования по-прежнему работало.

private class GraphTouchListener implements View.OnTouchListener {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // do whatever custom behavior you want here
        // return false so that the base onTouch event (pan, zoom) can still execute.
        return false;
    }
}
Другие вопросы по тегам