Android GestureListener无法检测事件

5

我已经查看了许多在线示例,它们都实现了gesturelistener。但是我无法让Android捕获手势事件,myText的值没有改变,并且logcat中也没有任何输出。我做错了什么?

public class MainActivity extends Activity {
private GestureDetector gDetector;
private TextView myText;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    gDetector = new GestureDetector(this, new MyOnGestureListener());
    myText = (TextView) findViewById(R.id.mytext);
    myText.setText("Test");

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);

    return true;
}

class MyOnGestureListener extends SimpleOnGestureListener implements
        OnGestureListener {
    @Override
    public boolean onDown(MotionEvent e) {
        Log.d("Main", "did");
        myText.setText("hi");
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        myText.setText("hi");
        Log.d("Main", "did");
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        Log.d("Main", "did");
        myText.setText("hi");
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2,
            float distanceX, float distanceY) {
        Log.d("Main", "did");
        myText.setText("hi");
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        Log.d("Main", "did");
        myText.setText("hi");
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        Log.d("Main", "did");
        myText.setText("hi");
        // TODO Auto-generated method stub
        return true;
    }
}

}

3个回答

7
缺失的部分是您未将GestureListener与触摸事件连接起来。因此,您可以像这样覆盖OnTouchListener:
@Override
public boolean onTouchEvent(MotionEvent me) {
    return gDetector.onTouchEvent(me);
}

如果你想在特定的视图上启用GestureDetector:

view.setOnTouchListener(new OnTouchListener{
    @Override
    public boolean onTouchEvent(MotionEvent me) {
       return gDetector.onTouchEvent(me);
    }
})

嘿,我正在尝试为MapView应用手势检测器。我正在使用您描述的方法,在其中定义了我的GestureDetector类,并按照您在此处描述的方式调用mMapView.setOnTouchListner()。但是我没有得到任何对onTouchEvent()的命中。您能告诉我为什么吗? - KairisCharm

4

您需要使用字段gDetector。目前,您只创建了一个实例,但现在您需要使用它来获取其中的信息。

例如:

 this.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(final View view, final MotionEvent event) {
       return gDetector.onTouchEvent(event);
    }
 });

0
尝试这段代码here 这应该可以工作。
同时更改这一行。
  gestureScanner = new GestureDetector(this);

  gestureScanner = new GestureDetector(ScrollTest.this, this);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接