Android 如何使用摄像机直播作为活动背景?
我正在尝试制作一个应用程序,其中我需要使用camera live feed作为背景。(我知道这是一件愚蠢的事情,但我无能为力,这是客户的要求) 我曾尝试使用Android 如何使用摄像机直播作为活动背景?,android,background,camera,surfaceview,live-wallpaper,Android,Background,Camera,Surfaceview,Live Wallpaper,我正在尝试制作一个应用程序,其中我需要使用camera live feed作为背景。(我知道这是一件愚蠢的事情,但我无能为力,这是客户的要求) 我曾尝试使用SurfaceView进行此操作,但迄今为止没有成功 到目前为止,我在Stack Overflow上发现的更多的是猜测或指导如何做到这一点,但没有实时示例或代码帮助。如果以前做过这项工作的人能与像我这样的堆栈溢出用户共享一段代码,那就太好了。看看这里: 这是制作显示相机预览的活动所需的所有代码。使用framelayout add with
SurfaceView
进行此操作,但迄今为止没有成功
到目前为止,我在Stack Overflow上发现的更多的是猜测或指导如何做到这一点,但没有实时示例或代码帮助。如果以前做过这项工作的人能与像我这样的堆栈溢出用户共享一段代码,那就太好了。看看这里:
这是制作显示相机预览的活动所需的所有代码。使用framelayout add with in surface查看其高度和宽度作为fillparent,然后添加另一个您希望的布局,不带背景:)!你可以考虑完全准确地解释你所尝试过的和遇到的问题。“尝试使用SurfaceView进行此操作,但迄今为止未取得成功”是一个远远不够的解释。您可以发布您尝试过的代码吗?我也在尝试这样做,但在将相机作为背景的布局方面存在问题。您是如何布局屏幕的?此示例改编自:And you need
package com.example.CameraPreview;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.io.IOException;
public class CameraView extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
public CameraView(Context context) {
super(context);
if(checkCameraHardware(context)) {
mCamera = getCameraInstance();
}
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public CameraView(Context context, AttributeSet attrs) {
super(context, attrs);
if(checkCameraHardware(context)) {
mCamera = getCameraInstance();
}
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
// The Surface has been created, now tell the camera where to draw the preview.
try {
mCamera.setPreviewDisplay(surfaceHolder);
mCamera.startPreview();
} catch (IOException e) {
Log.d("CameraView", "Error setting camera preview: " + e.getMessage());
}
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {
if (mHolder.getSurface() == null){
return;
}
try {
mCamera.stopPreview();
} catch (Exception e){
}
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
Log.d("CameraView", "Error starting camera preview: " + e.getMessage());
}
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
return true;
} else {
return false;
}
}
public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open();
}
catch (Exception e){
}
return c;
}
}