2015-02-19 4 views
1

Я планирую запрограммировать кнопку таким образом, чтобы при нажатии кнопки вибрация начиналась и продолжала вибрировать до пальца вверх или кнопка не нажата.Вибрация до тех пор, пока кнопка не будет нажата и не перестанет вибрировать, когда кнопка не нажата (или снят палец)

Я использую для прослушивания Touch для этой цели.

Мой код выглядит следующим образом:

package com.example.vibrator; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Vibrator; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.Button; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final Vibrator vibrator; 

     vibrator = (Vibrator) getSystemService(MainActivity.VIBRATOR_SERVICE); 

     Button btn = (Button) findViewById(R.id.button1); 
     btn.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       int action = event.getAction(); 

       if (action == MotionEvent.ACTION_DOWN) { 
        vibrator.vibrate(60000); 
       } else if (action == MotionEvent.ACTION_UP) { 
        vibrator.cancel(); 
       } 

       return true; 
      } 
     }); 
    } 
} 

Проблема в этом коде является то, что он продолжает вибрировать и когда палец вверх вибрация не прекращается или отменяется.

P.S я использовал разрешение в явном

+0

Проверьте с 'Log', если ваш' еще if' называется. Или, может быть, что-то другое обрабатывает событие motion up, поэтому ваша кнопка onTouchListener на uour не получит событие. Также проверьте, какой из них вы получаете от действия при отпускании пальца с экрана. – Mike

+0

Вы должны принять мой ответ, если он вам поможет. – yshahak

+0

Благодарю так много брата (yshahak). ожидая дополнительной поддержки в будущем. –

ответ

4

EDIT: исправлен код:

попробовать это:

int action = event.getActionMasked(); 

if (action == MotionEvent.ACTION_DOWN) { 
    long[] pattern = { 0, 200, 0 }; //0 to start now, 200 to vibrate 200 ms, 0 to sleep for 0 ms. 
    vibrator.vibrate(pattern, 0); // 0 to repeat endlessly. 
} else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) { 
    vibrator.cancel(); 
}  
+0

Не работает .... –

+0

Вставьте Log.i ("event", event.toString()); ниже int, чтобы проверить поток выполнения. – yshahak

+0

Думаю, я решил это для вас. Попробуйте исправить код в моем ответе. – yshahak

Смежные вопросы