Java 按住按钮重复回调

Java 按住按钮重复回调,java,android,android-camera,ontouchlistener,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 o

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

   }
   };

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

首先,我们需要一种方法来检查
按钮
是否仍被按下。为此,定义一个新的布尔字段,名为
buttonPressed

private boolean buttonPressed = false;
接下来,我们定义只要按下
按钮
就要运行的
Runnable

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
中,您需要在
ACTION\u DOWN
中将
按钮按下设置为
true
,然后在
ACTION\u UP
中再次设置为
false
。您还需要发布一次
按钮pressedRunnable
,只要按下
按钮,它就会自动重新发布

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

到目前为止你试过什么?显而易见的解决方案是发布一个
Runnable
或使用一个
计时器。但别忘了检查
按钮是否仍被按下。@Xaver Kapeller请您发布一个runnable或timer的示例。谢谢,我是一个newbie@DonnieIbiyemi您可以在stackvoerflow本身上搜索示例
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;
    }
});