2014-02-18 162 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"/>