2015-12-16 58 views
1

我是Android的初學者,我正在瀏覽新波士頓教程。我遇到了這個手勢識別代碼。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)是指什麼?它從哪裏來?有沒有另一種方法來創建這個對象,可以幫助我理解這一點?

+0

我的朋友創建了一個關於您的問題的應用程序,也許代碼可以幫助您http://forum.xda-developers.com/showthread.php?t=2351974 –

回答

1

第一個參數this是當前活動的上下文。 (SO質疑有關背景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 
}