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);           
        }
    }

如果有任何可以帮助非常感谢。

4

5 回答 5

69

试试这个代码

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" />

我也同意蒂姆的观点,因为onTouchListener在点击之前会调用它,因此它可以为您的应用程序提供最佳输出。

于 2011-04-24T15:52:08.610 回答
44

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

view.setOnLongClickListener(new View.OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {
        v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
        return true;
    }
});
于 2014-10-03T11:15:41.473 回答
7

使用OnTouchListener()代替onClick()。当你打电话和打电话时,它会在你

的监听器内部当你按下时它会开始振动,当你抬起时它会停止。MotionEvent.getAction() == MotionEvent.ACTION_DOWNvibrator.start(some arbitrarily large number here perhaps 1 minute or more)
getAction() == MotionEvent.ACTION_UPvibrator.cancel().

于 2011-04-24T15:45:18.847 回答
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”方法。

此外,如果您希望手机在按住按钮时振动,请使用“onLongClick”方法

于 2011-04-24T14:13:05.330 回答
0

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

于 2011-04-24T14:09:40.060 回答