下面列出了怎么用android.hardware.Camera.PreviewCallback的API类实例代码及写法,或者点击链接到github查看源代码。
@SuppressLint("NewApi")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
nv21 = new byte[PREVIEW_WIDTH * PREVIEW_HEIGHT * 2];
this.setPreviewCallback(new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
synchronized (nv21) {
System.arraycopy(data, 0, nv21, 0, data.length);
isNV21ready = true;
}
}
});
return view;
}
public void requestPreviewFrame(final PreviewCallback callback) {
try {
camera.setOneShotPreviewCallback(callback);
} catch (final RuntimeException x) {
Logger.e(x, "problem requesting preview frame, callback won't be called");
}
}
@SuppressWarnings("deprecation")
public CameraPreview(Context context, Camera camera, PreviewCallback previewCb, AutoFocusCallback autoFocusCb) {
super(context);
mCamera = camera;
previewCallback = previewCb;
autoFocusCallback = autoFocusCb;
/*
* Set camera to continuous focus if supported, otherwise use software
* auto-focus. Only works for API level >=9.
*/
/*
* Camera.Parameters parameters = camera.getParameters(); for (String f
* : parameters.getSupportedFocusModes()) { if (f ==
* Parameters.FOCUS_MODE_CONTINUOUS_PICTURE) {
* mCamera.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
* autoFocusCallback = null; break; } }
*/
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
// deprecated setting, but required on Android versions prior to 3.0
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@SuppressWarnings("deprecation")
public CameraPreview(Context context, Camera camera, PreviewCallback previewCb, AutoFocusCallback autoFocusCb) {
super(context);
mCamera = camera;
previewCallback = previewCb;
autoFocusCallback = autoFocusCb;
/*
* Set camera to continuous focus if supported, otherwise use software
* auto-focus. Only works for API level >=9.
*/
Camera.Parameters parameters = camera.getParameters();
for (String f: parameters.getSupportedFocusModes()) {
if (f == Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
autoFocusCallback = null;
break;
}
}
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
// deprecated setting, but required on Android versions prior to 3.0
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void requestPreviewFrame(final PreviewCallback callback) {
try {
camera.setOneShotPreviewCallback(callback);
} catch (final RuntimeException x) {
log.warn("problem requesting preview frame, callback won't be called", x);
}
}
public void setPreviewCallback(PreviewCallback previewCallback) {
mPreviewCallback = previewCallback;
if (mPreviewBuffer == null) {
mPreviewBuffer = new byte[mPreviewWidth * mPreviewHeight * 3 / 2];
}
mCamera.addCallbackBuffer(mPreviewBuffer);
mCamera.setPreviewCallbackWithBuffer(mPreviewCallback); // 设置预览的回调
}
@SuppressWarnings("deprecation")
public CameraPreview(Context context, Camera camera, PreviewCallback previewCb, AutoFocusCallback autoFocusCb) {
super(context);
mCamera = camera;
previewCallback = previewCb;
autoFocusCallback = autoFocusCb;
/*
* Set camera to continuous focus if supported, otherwise use software
* auto-focus. Only works for API level >=9.
*/
Camera.Parameters parameters = camera.getParameters();
for (String f: parameters.getSupportedFocusModes()) {
if (f == Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
autoFocusCallback = null;
break;
}
}
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
// deprecated setting, but required on Android versions prior to 3.0
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void run()
{
cameraManager.requestPreviewFrame(new PreviewCallback()
{
@Override
public void onPreviewFrame(final byte[] data, final Camera camera)
{
decode(data);
}
});
}
@Override
public void run() {
if (fromGallery) {
cameraHandler.postDelayed(fetchAndDecodeRunnable, 500);
return;
}
cameraManager.requestPreviewFrame(new PreviewCallback() {
@Override
public void onPreviewFrame(final byte[] data, final Camera camera) {
decode(data);
}
});
}
@SuppressWarnings("deprecation")
public CameraPreview(Context context, Camera camera, PreviewCallback previewCb, AutoFocusCallback autoFocusCb) {
super(context);
mCamera = camera;
previewCallback = previewCb;
autoFocusCallback = autoFocusCb;
/*
* Set camera to continuous focus if supported, otherwise use software
* auto-focus. Only works for API level >=9.
*/
/*
* Camera.Parameters parameters = camera.getParameters(); for (String f
* : parameters.getSupportedFocusModes()) { if (f ==
* Parameters.FOCUS_MODE_CONTINUOUS_PICTURE) {
* mCamera.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
* autoFocusCallback = null; break; } }
*/
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
// deprecated setting, but required on Android versions prior to 3.0
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void requestPreviewFrame(final PreviewCallback callback) {
try {
camera.setOneShotPreviewCallback(callback);
} catch (final RuntimeException x) {
Log.d(Config.LOGTAG,"problem requesting preview frame, callback won't be called", x);
}
}
public void setPreviewCallback(PreviewCallback previewCallback) {
if (this.mCamera != null){
mCamera.setPreviewCallback(previewCallback);
}
}
public void requestPreviewFrame(final PreviewCallback callback)
{
camera.setOneShotPreviewCallback(callback);
}
public void requestPreviewFrame(final PreviewCallback callback) {
camera.setOneShotPreviewCallback(callback);
}
public PreviewCallback getPreviewCallback() {
return previewCallback;
}
public void setPreviewCallback(PreviewCallback previewCallback) {
this.previewCallback = previewCallback;
if (camera != null) {
camera.setPreviewCallback(previewCallback);
}
}