2015-04-29 22 views
0

我想做一個簡單的應用程序,它可以做到以下幾點。 有一個用於mediaPlay的ImageView和SurfaceView。Android - 正在觸摸視圖時執行任務嗎?怎麼樣?

  1. 如果這個觀點沒有被觸及,什麼也不做。
  2. 如果正在觸摸此視圖,請每隔100 ms留出一條日誌消息。

假設 - 我們有printLogMsg()已可用於2

那麼,我該怎麼辦是一個onTouchListener設置爲ImageView的。 我的問題是,如何在此onTouchListener中執行printLogMsg()。

private OnTouchListener mTouchListener = new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       Log.d("log", "!!!down"); 
       break; 

      case MotionEvent.ACTION_HOVER_ENTER: 
       Log.d("log", "!!!hover enter"); 
       break; 

      case MotionEvent.ACTION_UP: 
       Log.d("log", "!!!up"); 
       break; 
     } 

     return false; 
    } 
}; 

我有這樣的事情,但觸摸ImageView將只打印「向下」一次。有沒有辦法做到這一點?謝謝!

謝謝:)

+0

見http://stackoverflow.com/a/4598737/1760858。只要確保在收到ACTION_UP時停止計時器(或停止重新計劃)。 – velis

回答

1

你可以這樣做。

private android.os.Handler handler; 
private Runnable someTask; 

初始化它們somehwere

private void init(){ 
    handler = new Handler(Looper.getMainLooper()); 
    someTask = new Runnable() { 
     @Override 
     public void run() { 
      // Do what you want 
      printLogMsg(); 
      handler.postDelayed(this, 100); 
     } 
    }; 
} 

而且onTouch方法

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_UP: 
      handler.removeCallbacks(someTask); 
      return true; 
     case MotionEvent.ACTION_DOWN: 
      handler.postDelayed(someTask, 100); 
     default: 
      return super.onTouchEvent(event); 
    } 
} 
相關問題