8

カメラのライブ フィードを背景として使用する必要があるアプリを作成しようとしています。(私はそれがばかげたことだと知っていますが、どうしようもありません。それはクライアントの要求です)。

を使用して試してみSurfaceViewましたが、これまでのところ成功していません。

これまでのところ、スタック オーバーフローで見つけたものは推測や指示にすぎませんが、リアルタイムの例やコードのヘルプはありません。以前にこれを行ったことのある人が、コードの一部を私のようなスタック オーバーフロー ユーザーと共有できれば幸いです。

4

2 に答える 2

9

ここを見てください:

http://developer.android.com/guide/topics/media/camera.html

カメラのプレビューを表示するアクティビティを作成するために必要なすべてのコードがあります。

于 2013-07-12T21:26:26.623 に答える
3
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;
    }

}
于 2013-11-05T03:56:34.300 に答える