Android手势代码说明

时间:2015-12-16 16:19:18

标签: java android gesture gesturedetector

我是android的初学者,我正在阅读新浪的教程。我遇到了这个代码用于手势识别。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myMessage = (TextView) findViewById(R.id.myMessage);
    this.gestureDetector = new GestureDetectorCompat(this, this);
    gestureDetector.setOnDoubleTapListener(this);

}

我查找了GestureDetectorCompat的文档,可以看到使用的构造函数是GestureDetectorCompat(Context context, GestureDetector.OnGestureListener listener)

但是,我无法理解new GestureDetectorCompat(this, this);将如何创建此对象。 (this, this)指的是什么?从哪里来的?有没有其他方法可以帮助我理解这个对象?

1 个答案:

答案 0 :(得分:1)

第一个参数this是您当前活动的上下文。 (关于上下文的想法的问题What is 'Context' on Android?)第二个问题再次是this,因为你的活动应该实现implements OnGestureListener, OnDoubleTapListener,这就是为什么你可以写而不是

... new GestureDetector(this, new OnGestureListener() {...} ); 
//and then
gestureDetector.setOnDoubleTapListener(new OnDoubleTapListener() {...});

... new GestureDetectorCompat(this, this);
//and
gestureDetector.setOnDoubleTapListener(this);

如果您不想使用您发布的结构(使用this参数),那么您可以轻松使用这样的完整结构(仅作为完整用途的示例):

gestureDetector.setOnDoubleTapListener(new OnDoubleTapListener() {

     @Override 
     public boolean onSingleTapConfirmed(MotionEvent e) {
         return false; 
     } 

     @Override 
     public boolean onDoubleTap(MotionEvent e) {
         mapView.getController().zoomInFixing((int) e.getX(), (int) e.getY());
         return false; 
     }
     //you could override more methods here if you want 
}