2014-02-18 85 views
0

請幫助。這是我想要實現的,我有這個按鈕,當我點擊它時會振動手機,具體取決於按下按鈕的時間長短。按住按鈕時的Android振動

就像你按住按鈕5秒鐘的振動將是5秒。

就像一個油門

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button b = (Button) findViewById(R.id.start); 
    b.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
       while((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN){ 
          vb.vibrate(100); 
       } 
      return false; 
     } 

    }); 
} 

在我的代碼的振動是這樣它停止每隔100毫秒。也崩潰了電話

啦啦啦啦啦啦啦啦

我想達到一個振動會是這樣的。時間越長,你會點擊並按住的時間就越長振動

laaaaaaaaaaaaaaaaaaaaaaaaaaa

+0

請描述你的確切的問題是? – stamanuel

+0

ok.just 1秒.. – Snippet

回答

3

你的代碼有開始振動。您可以將持續時間增加到某個人不敢握手的時間(10分鐘?),這是不現實的。

當他們解除他們的手指調用取消

public boolean onTouch(View v, MotionEvent event) { 
    Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
    if((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN){ 
     vb.vibrate(1000*60*10);//10mins 
     return true; 
    } 
    if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP){ 
     vb.cancel(); 
     return false; 
    } 
+0

謝謝你這麼多老兄! – Snippet

+0

它比使用處理程序更好,並在事件中使用此handler.post(runnable);如果(計數<2000) \t { \t handler.postDelayed(runnable,200); \t} \t // ?? \t其他 \t { //調用 \t Viberate方法} –

+0

@ArslanAhmad我不明白,在一個評論。也許你應該把它作爲一個答案 –

0
import android.os.Vibrator;  
Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE); 


public boolean onTouch(View v, MotionEvent event) { 
      boolean isReleased = event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL; 
      boolean isPressed = event.getAction() == MotionEvent.ACTION_DOWN; 

      if (isReleased) { 
       // do whatever you want 
      } else if (isPressed) { 
        v.vibrate(500); 
      } 
      return false; 
     } 

注:

不要忘了,包括在AndroidManifest.xml文件權限:

<uses-permission android:name="android.permission.VIBRATE"/>