2013-12-17 28 views
0

我想調用函數(如果用戶未觸及另一個視圖10秒,關閉一個小部件)。 可觸摸的觀點有聽衆喜歡處理程序刪除回調,並再次投入ACTION_UP

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    int x = (int) event.getX(); 
    int y = (int) event.getY(); 
    switch (event.getAction()) { 

    case MotionEvent.ACTION_MOVE: 
     if(handler != null){ 
      handler.removeCallbacksAndMessages(null); 
      handler = null; 
     } 
     break; 
    case MotionEvent.ACTION_DOWN: 
     if(handler != null){ 
      handler.removeCallbacksAndMessages(null); 
      handler = null; 
     } 
     break; 
    case MotionEvent.ACTION_UP: 
     startTime = Calendar.getInstance().get(
         Calendar.MILLISECOND); 
       handler = new Handler(); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         isMenuVisible = false; 
         postInvalidate(); 
        } 
       }, startTime + EXPANDED_PERIOD); 
     break; 
    } 
    return true; 
} 

我曾嘗試也只有一個成員處理程序,並避免創建起來。想法是當用戶做出行動等待10秒,如果不再觸摸然後關閉。 但它不關閉。當我在ACTION_DOWN和ACTION_MOVE中移除時,即使我觸摸視圖,移除它也會關閉。如何解決這個問題?

回答

1

你不應該在postDelayed添加開始時間()

Read doc here.

使用下面的代碼來代替。

handler.postDelayed(***, EXPANDED_PERIOD);