Что я хочу: Пользователь удерживает кнопку нажатой на 1900 мс. Если он выберет свой палец до 1900 мс, телефон перестанет вибрировать. Хотя, если он держит палец на кнопке более 1900 секунд, то работает calculate(). Я использую: postDelayed, поскольку я читаю, это не мешает нить ui. Я пытался проверить, прошел ли 1900 секунд, пользователь не выбрал свой палец, даже если вычислять методы пробега. Ошибка Happenin g: Если пользователь выбирает свой палец до 1900 секунд или просто прикасается и сразу же выбирает, телефон продолжает вибрировать. Хотя это не должно происходить, поскольку я проверяю его с помощью MotionEvent.ACTION_UP. Пожалуйста помоги !!postDelayed blocking ui thread
int flag = 0;
int aborted_flag = 0;
@Override
public boolean onTouch(View v, MotionEvent event) {
Handler mHandler = new Handler();
if(event.getAction()==MotionEvent.ACTION_DOWN){
scanning();
t1 = System.currentTimeMillis();
vibrator.vibrate(1900);
mHandler.postDelayed(new Runnable() {
public void run() {
check();
}
}, 1901);
}
if(event.getAction()==MotionEvent.ACTION_UP){
if(flag == 0){
t2 = System.currentTimeMillis();
vibrator.cancel();
calculate();
aborted_flag = 1;
}
}
return true;
}
private void check() {
t2 = System.currentTimeMillis();
Log.e("Hello","Inside Check");
Log.e("Hello",""+aborted_flag);
vibrator.cancel();
if(aborted_flag==0){
calculate();
flag = 1;
}
}
private void scanning() {
textView.setText("Scanning");
}
private void calculate() {
Log.e("t2-t1 ", t2-t1+"");
if(t2-t1>=1900){
Random r = new Random();
int k = r.nextInt((5 - 0) + 1) + 0;
textView.setText(str[k]);
////////////animation library code/////////////
YoYo.with(Techniques.StandUp)
.duration(700)
.playOn(findViewById(R.id.text_view));
////////////////////////////////////////
changeBackgroundColor(k);
//textView.setTextColor(Color.parseColor("#00ff00"));
flag = 0;
}
else{
textView.setText("Aborted\n Try Again");
relativeLayout.setBackgroundResource(R.color.red);
}
}
public void changeBackgroundColor(final int k) {
runOnUiThread(new Runnable(){
public void run() {
switch(k){
case 0: relativeLayout.setBackgroundResource(R.color.blue);
break;
case 1: relativeLayout.setBackgroundResource(R.color.pink);
break;
case 2:;
case 3: relativeLayout.setBackgroundResource(R.color.green);
break;
default:relativeLayout.setBackgroundResource(R.color.yellow);
}
}
});
}
Я попробовал это, но это не помогает :( –
Какие ошибки вы получаете – kroky
я редактировал код, как вы сказали, и немного незначительные изменения? также, добавив aborted_flag. Я хочу, чтобы пользователь не выбирал свой палец даже после 1900 мс, метод calculate() запускался и менялся цвет экрана. Но происходит то, что если он держит палец, то метод вычисления не работает. –