Java 按住按钮重复回调
我在android应用程序中实现了Camera.PreviewCallback,从textureview中抓取帧,效果很好。我想知道,当按下按钮时,是否继续重复此回调 我的代码如下: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
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;
}
});