Как прослушать сенсорные события в 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;
}
}