2014-08-22 3 views
1

Я реализовал Camera.PreviewCallback в своем приложении Android для захвата кадров из текстурного изображения, и он отлично работает. я хотел бы знать, чтобы продолжать повторять этот обратный вызов при нажатии кнопки.Повторите обратный вызов на кнопке Удерживайте нажатой

Мой код ниже:

This is the code for the Camera.PreviewCallback: 

    Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() { 
    @Override 
    public void onPreviewFrame(byte[] data, Camera camera) { 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    Camera.Parameters parameters = camera.getParameters(); 
    Size size = parameters.getPreviewSize(); 
    YuvImage image = new YuvImage(data, parameters.getPreviewFormat(),size.width, size.height, null);    
     image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 90, out); 
     byte[] imageBytes = out.toByteArray(); 
     Bitmap images = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); 
     rev = new ArrayList<Bitmap>(); 
     rev.add(images); 

    } 
    }; 

Это код для обработки, нажмите кнопку вниз:

Опять же, как я делаю обратный вызов повторение при нажатии кнопки down.Thanks

+0

Что вы пробовали? Очевидным решением было бы опубликовать «Runnable» или использовать «Timer». Но не забудьте проверить, нажата ли кнопка «Button». –

+0

@Xaver Kapeller, пожалуйста, вы можете отправить пример для запуска или таймера. спасибо новичка –

+0

@DonnieIbiyemi вы можете искать примеры на самом стеке самого стека http://stackoverflow.com/questions/17439252/how-to-pause-handler-postdelayed-timer-on-android/17439429#17439429 – Raghunandan

ответ

1

Прежде всего нам нужно проверить, все еще нажата кнопка Button. С этой целью определить новое логическое поле, называемое buttonPressed:

private boolean buttonPressed = false; 

Далее мы определим Runnable мы хотим запустить, пока Button нажата:

private final Runnable buttonPressedRunnable = new Runnable() { 
    @Override 
    public void run() { 
     // Check if the Button is pressed 
     if(buttonPressed) { 
      // Insert whatever you want to do while the Button is pressed here 
      ... 

      // Repost the Runnable with an appropriate delay 
      button.postDelayed(this, 100); 
     } 
    } 
}; 

Наконец в вашем OnTouchListener вам необходимо установить buttonPressed до true в ACTION_DOWN и снова до false в ACTION_UP. Вам также нужно отправить сообщение buttonPressedRunnable один раз, пока нажата кнопка Button.

button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch(event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       mCamera.setPreviewCallback(previewCallback); 
       buttonPressed = true; 
       button.post(buttonPressedRunnable); 
       break; 
      case MotionEvent.ACTION_UP: 
       buttonPressed = false; 
       break; 
     } 
     return false; 
    } 
}); 
Смежные вопросы