2011-11-10 102 views
1

我重寫了我的SurfaceView的onTouchEvent()。每當我觸摸我的手機屏幕時,它應該打印觸摸事件的座標。這是我的代碼:爲什麼返回true onSurfaceView onTouchEvent()?

public class MyGestureActivity extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.i(TAG, "onCreate()"); 

     panel = new MyGesturePanel(this); 
     setContentView(panel); 
     } 
    } 

    public class MyGesturePanel extends SurfaceView implements SurfaceHolder.Callback { 
    public boolean onTouchEvent(MotionEvent event) { 
     Log.i(TAG, "onTouchEvent! " + event.getX() + " " + event.getY()); 
     return super.onTouchEvent(event); 
    } 
    } 

如果我回到super.onTouchEvent(事件),只打印1個事件(ACTION_DOWN),即使我沒有鬆開我的手指在屏幕上。我也嘗試打印返回的內容,並返回false。

現在,我沒有使用super.onTouchEvent(event),而是返回true。當我將返回值設置爲true時,它的功能正常。當我將手指放在屏幕上時,它會打印大量的ACTION_MOVE事件。 (即使我不移動我的手指)

這是爲什麼?難道我做錯了什麼?將「硬編碼」迴歸爲真是可取的嗎?

謝謝!

回答

3

在onTouchEvent()中返回true告訴Android系統您已經處理了觸摸事件,不需要進一步處理。如果您返回false,則Android系統將成爲onTouch事件的處理程序,並將覆蓋您通過ACTION_DOWN(這是您觸摸屏幕時的第一個事件)的任何事件的代碼。

相關問題