如何在GraphView上监听触摸事件?

时间:2014-06-20 16:07:43

标签: android android-graphview

我需要为我的程序添加与用户平移/缩放GraphView相关的行为。我正在尝试注册要通知的动作事件,所以我可以做一些事情,因为用户通过触摸操作图形。

我尝试重写onTouchEvent并在LineGraph的子类中实现OnTouchLIstener。我也尝试在Fragment / View中执行此操作,我在其中放置GraphView。但是,我的方法永远不会被调用,但图表允许像以前一样平移/缩放。

e.g:

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 个答案:

答案 0 :(得分:0)

您需要访问View使用的基础GraphView

假设您有一个名为m_graphView的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());
}

请务必在onTouch()中返回false,以便pan / zoom的基类行为仍然有效。

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;
    }
}