按住按钮重复回调

时间:2014-08-22 11:30:06

标签: java android android-camera ontouchlistener

我在我的Android应用程序中实现了Camera.PreviewCallback来从textureview中抓取帧并且它工作正常。我想知道在按下按钮时不断重复此回调。

我的代码如下:

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

   }
   };

这是处理按下按钮的代码:

    button.setOnTouchListener(new OnTouchListener() {
     @Override
     public boolean onTouch(View v, MotionEvent event) {
    switch(event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        mCamera.setPreviewCallback(previewCallback);
        break;
    case MotionEvent.ACTION_UP:
        // End
        break;
     }
    return false;
    }
  });

再次按下按钮时,如何重复回调。谢谢

1 个答案:

答案 0 :(得分:2)

首先,我们需要一种方法来检查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; } }); 它就会重新发布。

{{1}}