我在我的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;
}
});
再次按下按钮时,如何重复回调。谢谢
答案 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}}