2013-03-12 63 views
0

也許有人可以解釋我,如何從OnLongClickListener正確振動。在下面的方法中,振動非常短。 如果我設置return false;振動持續5000ms如預期,BUT OnClickListener被觸發。從OnLongClickListener振動

我應該如何從OnLongClickListener整個週期振動,而不是激發OnClickListener

final Vibrator x = (Vibrator) getParent() 
      .getSystemService(Context.VIBRATOR_SERVICE); 
button.setOnLongClickListener(new OnLongClickListener() { 
     @Override 
    public boolean onLongClick(View v) { 
     x.vibrate(5000); 
     return true; 
    } 
}); 

回答

0

當點擊事件被觸發時,它會傳遞到可用的最低處理程序(除非有人被中斷)。在你的情況下,長按事件首先傳遞給OnLongClickListener。如果該監聽程序返回true,則它基本上宣佈已處理此單擊事件。如果它返回false,則它宣佈click事件不是由它處理的,這就是爲什麼事件會沿層次結構高於其上一級處理程序傳遞的原因,在您的案例中爲OnClickListener

這就是爲什麼返回false不是要走的路,因爲您確實想要處理長按事件。

如何創建後臺線程或振動本身的ASyncTask。 類似:

@Override 
public boolean onLongClick(View v) { 
    getHandler().post(new Runnable() { 

     @Override 
     public void run() { 
      x.vibrate(5000);   
     } 

    }); 
    return true; 
} 

我沒有測試的代碼,但它應該是罰款。

0

您可以設置一個計時器在振動週期內運行,並且只有在超時後才返回True。有點fudgy,但它應該工作。