按住按钮时震动

17

我正在制作一个应用程序,用户按住按钮使手机震动,但我不确定如何使它只有在按钮被按住时才会震动。到目前为止,我的代码是:

package one.two.bn;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
import android.view.View.OnClickListener;



    public class Vb extends Activity {
            /** Called when the activity is first created. */
        private Button button1;
        private Vibrator vibrator;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            button1 = (Button)findViewById(R.id.button1);
            button1.setOnClickListener(new View.OnClickListener() {
            Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);    
        public void onClick(View v) {
                if(v==button1){ 
                vibrator.vibrate(300000);           
        }
    }

如果有人能帮忙,非常感谢。


你的setOnClickListener后面不是缺少了一个右括号吗?你在哪里关闭它呢? - Bedir Yilmaz
5个回答

70

尝试这段代码

Vibrator vibe = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE) ;

然后在您的按钮的 OnClickListener 中:

vibe.vibrate(50); // 50 is time in ms

而且不要忘记需要在清单文件中添加权限(在</application>标签后):

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

我也同意Tim的观点,因为onTouchListener在点击事件之前被调用,所以它能够为您的应用程序提供最佳输出。


45

如果您需要像ActionMode或ContextMenu一样的长按反馈振动,

view.setOnLongClickListener(new View.OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {
        v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
        return true;
    }
});

7
使用 OnTouchListener() 代替 onClick()

在监听器中,当 MotionEvent.getAction() == MotionEvent.ACTION_DOWN 时,调用 vibrator.start(一些任意大的数字,例如1分钟或更长时间)
getAction() == MotionEvent.ACTION_UP 时,调用 vibrator.cancel()

这样,当你按下时它就会开始震动,而当你松开时它就会停止。

1
button1.setOnClickListener(new View.OnClickListener() {
  [...]
public void onClick(View v) {
  if(v==button1){ // <- Don't need that...
    // Do Stuff...
  }
}});

如果您在“onClickListener”中使用内部类,则无需检查View是否为Button,因为只有Button才能触发该“onClick”方法。
此外,如果您希望手机在按住按钮时持续振动,请使用{{link1:'onLongClick'-method}}。

0
在清单文件中添加振动权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接