2015-04-25 2 views
0

Я работаю над приложением Android, в котором я использую функцию записи голоса. Для этого я нажимаю кнопку для записи, например, если пользователь удерживает кнопку более 3 секунд, тогда она позволит записывать.Одиночный клик на кнопке для записи голоса

Для этого я использую сенсорный прослушиватель, но проблема в том, что если пользователь просто нажимает кнопку, не удерживая ее, происходит вызов или функция. Мой код приведен ниже:

mBtnSendAudio.setOnTouchListener(new OnTouchListener() { 

      boolean shouldRecord = true; 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       if(!canChat) { 
        Toast.makeText(getBaseContext(), "Turned Off Chat", Toast.LENGTH_SHORT).show(); 
        return true; 
       } 

       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        mLastDown = System.currentTimeMillis(); 
        shouldRecord = true; 
        startRecording(); 
        mLLAudioRecordingHover.setVisibility(View.VISIBLE); 
        rectAudioButton = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom()); 
        mStartTime = System.currentTimeMillis(); 
        mRecordHandler.removeCallbacks(mUpdateTimeTask); 
        mRecordHandler.postDelayed(mUpdateTimeTask, 100); 

       } else if (event.getAction() == MotionEvent.ACTION_UP) { 

        if (shouldRecord) { 
         mLLAudioRecordingHover.setVisibility(View.GONE); 
         mLastDuration = System.currentTimeMillis() - mLastDown; 
         mRecordHandler.removeCallbacks(mUpdateTimeTask); 
         mLLAudioRecordingHover.setVisibility(View.GONE); 
         stopRecording(true, mLastDuration); 
        } 
       } 

       if (event.getAction() == MotionEvent.ACTION_MOVE) { 

        // finger move outside of button's bounds 
        if (!rectAudioButton.contains(v.getLeft() + (int) event.getX(), v.getTop()+ (int) event.getY()) && shouldRecord) { 
         mRecordHandler.removeCallbacks(mUpdateTimeTask); 
         shouldRecord = false; 
         stopRecording(shouldRecord, 0); 
         mLLAudioRecordingHover.setVisibility(View.GONE); 
        } 
       } 
       return v.onTouchEvent(event); 
      } 
     }); 

ответ

0

у вас есть два варианта здесь: сначала вы можете забыть о 3-х секундах и использовать View.OnLongClickListener, который является стандартным слушатель используется большинством разработчиков для обнаружения нажмите и удерживайте событие или вы можете установить таймер внутри if (event.getAction() == MotionEvent.ACTION_DOWN) {} условия здесь код для 3 второго таймера:

new CountDownTimer(3000, 1000) { 

        public void onTick(long millisUntilFinished) { 



        } 

        public void onFinish() { 
         //your caode 
        } 
       }.start(); 

использовать нужные функции внутри onFinish() метода.

1

После попробовать следующие

mBtnSendAudio.setOnTouchListener(new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View arg0, MotionEvent arg1) { 
     switch (arg1.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      mRecordHandler.postDelayed(run, 3500/* OR the amount of time you want */); 
      break; 

     default: 
      mRecordHandler.removeCallbacks(run); 
      break; 

     } 
     return true; 
    } 
}); 

и здесь Runnable изменить статус записи

Runnable run = new Runnable() { 

@Override 
public void run() { 
    shouldRecord = true; 

} 

};

UPDATE:

Тогда вы должны использовать GestureDetector следующего

private GestureDetector gestureDetector = new GestureDetector(this, new SimpleOnGestureListener { 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent event) { 
     return true; 
    } 
}); 

затем в onTouch (-, -) из OnTouchListener

if (gestureDetector.onTouchEvent(arg1)) { 
       // single tap 
       //write your code for single click 
       return true; 
    } 

Надеется, что это будет помогает вы.

+0

благодарит за ваш ответ. С нажатием кнопки он работает, но если я просто нажму кнопку, это не сработает. Пожалуйста, помогите мне в этом. Спасибо –

+0

что вы хотите сделать, если пользователь нажмет на кнопку? –

+0

@UKhan обновляется за один клик после попытки. –

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