Android 在每次拍摄后显示相机预览

Android 在每次拍摄后显示相机预览,android,android-camera,Android,Android Camera,我用安卓相机拍了四张照片。在每张照片之后,我希望相机立即预览,然后再拍摄另一张照片。我有四个。但当我运行我的应用程序时,它拍摄第一张照片,然后我听到四个摄像头的声音。我猜其他照片正在显示,但未显示在曲面视图上。我怎样才能解决这个问题 这是我的代码。 public class TakePhoto extends Activity implements SurfaceHolder.Callback, OnClickListener{ Camera camera; SurfaceVi

我用安卓相机拍了四张照片。在每张照片之后,我希望相机立即预览,然后再拍摄另一张照片。我有四个。但当我运行我的应用程序时,它拍摄第一张照片,然后我听到四个摄像头的声音。我猜其他照片正在显示,但未显示在曲面视图上。我怎样才能解决这个问题

这是我的代码。

public class TakePhoto extends Activity implements SurfaceHolder.Callback, OnClickListener{

    Camera camera;
    SurfaceView surfaceView;
    SurfaceHolder surfaceHolder;
    boolean previewing = false;
    LayoutInflater controlInflater = null;

    TextView  textView1 ;

    /** Called when the activity is first created. */

    ImageView takepicture;       

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        getWindow().setFormat(PixelFormat.UNKNOWN);
        surfaceView = (SurfaceView)findViewById(R.id.camerapreview);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        controlInflater = LayoutInflater.from(getBaseContext());
        View viewControl = controlInflater.inflate(R.layout.control, null);
        LayoutParams layoutParamsControl 
                = new LayoutParams(LayoutParams.FILL_PARENT, 
                LayoutParams.FILL_PARENT);
        this.addContentView(viewControl, layoutParamsControl);

        takepicture = (ImageView)findViewById(R.id.takepicture);
        takepicture.setOnClickListener(this);

        textView1 = (TextView)findViewById(R.id.textView1);
        textView1.setText("");

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
        // TODO Auto-generated method stub
        if(previewing){
            camera.stopPreview();
            previewing = false;
        }

        if (camera != null){
            try {
                camera.setPreviewDisplay(surfaceHolder);
                camera.startPreview();
                previewing = true;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        camera = Camera.open(CameraInfo.CAMERA_FACING_FRONT);
        camera.setDisplayOrientation(90);

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        camera.stopPreview();
        camera.release();
        camera = null;
        previewing = false;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        switch (v.getId()){
            case R.id.takepicture:
                new CountDownTimer(4000, 1000) {

                    public void onTick(long millisUntilFinished) {
                        textView1.setText(" " + millisUntilFinished / 1000);
                    }

                    public void onFinish() {
                        textView1.setText("");

                        //camera.takePicture(myShutterCallback, 
                        //myPictureCallback_RAW, myPictureCallback_JPG);

                        new CountDownTimer(5000, 1000) {

                            public void onTick(long millisUntilFinished) {

                                camera.startPreview();
                                camera.takePicture(myShutterCallback, myPictureCallback_JPG, myPictureCallback_JPG);

                            }

                             public void onFinish() {
                                 textView1.setText("");
                             }    
                         }.start();
                     }   
                 }.start();
                 break;
             }  
         }

         ShutterCallback myShutterCallback = new ShutterCallback(){

            @Override
            public void onShutter() {
                // TODO Auto-generated method stub
            }
         };

         PictureCallback myPictureCallback_RAW = new PictureCallback(){

             @Override
             public void onPictureTaken(byte[] arg0, Camera arg1) {
                // TODO Auto-generated method stub
             }
         };

         PictureCallback myPictureCallback_JPG = new PictureCallback(){

             @Override
             public void onPictureTaken(byte[] arg0, Camera arg1) {
                // TODO Auto-generated method stub
                Bitmap bitmapPicture 
                        = BitmapFactory.decodeByteArray(arg0, 0, arg0.length);
             }
         };

         private class CaptureThread extends Thread {

            @Override
            public void run() {

                int count = 0;
                while(count < 4) {

                    camera.takePicture(myShutterCallback, myPictureCallback_JPG, myPictureCallback_JPG);

                    count++;
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException exception) {
                        exception.printStackTrace();
                    }
                }
            }
        }
    }
}
public类TakePhoto扩展活动实现SurfaceHolder.Callback、OnClickListener{
摄像机;
表面视图表面视图;
浮雕浮雕;
布尔预览=假;
LayoutFlater控件充气器=空;
文本视图文本视图1;
/**在首次创建活动时调用*/
图像视图拍摄;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Picture);
getWindow().setFormat(PixelFormat.UNKNOWN);
surfaceView=(surfaceView)findViewById(R.id.camerapreview);
surfaceHolder=surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(surfaceHolder.SURFACE\u TYPE\u PUSH\u缓冲区);
controlInflater=LayoutInflater.from(getBaseContext());
视图控件=控件充气器。充气(R.layout.control,null);
LayoutParams LayoutParams控件
=新的LayoutParams(LayoutParams.FILL\u父级,
LayoutParams.FILL\u PARENT);
this.addContentView(viewControl、layoutParamsControl);
takepicture=(ImageView)findViewById(R.id.takepicture);
takepicture.setOnClickListener(这个);
textView1=(TextView)findViewById(R.id.textView1);
textView1.setText(“”);
}
@凌驾
公共无效表面更改(表面文件夹持有者,整型格式,整型宽度,
整数高度){
//TODO自动生成的方法存根
如果(预览){
camera.stopPreview();
预览=假;
}
如果(照相机!=null){
试一试{
摄像头。设置预览显示(surfaceHolder);
camera.startPreview();
预览=正确;
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
@凌驾
已创建的公共空白表面(表面持有人){
//TODO自动生成的方法存根
camera=camera.open(CameraRainfo.camera面向前方);
摄像头。设置显示方向(90);
}
@凌驾
公共空间表面覆盖(表面覆盖物持有人){
//TODO自动生成的方法存根
camera.stopPreview();
相机。释放();
摄像机=零;
预览=假;
}
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
开关(v.getId()){
案例R.id.拍摄照片:
新的倒计时(40001000){
公共void onTick(长毫秒未完成){
textView1.setText(“+millisuntillfinished/1000”);
}
公共无效onFinish(){
textView1.setText(“”);
//拍照(myShutterCallback,
//myPictureCallback_RAW,myPictureCallback_JPG);
新的倒计时器(50001000){
公共void onTick(长毫秒未完成){
camera.startPreview();
拍照(myShutterCallback,myPictureCallback_JPG,myPictureCallback_JPG);
}
公共无效onFinish(){
textView1.setText(“”);
}    
}.start();
}   
}.start();
打破
}  
}
ShutterCallback myShutterCallback=新建ShutterCallback(){
@凌驾
公共空间{
//TODO自动生成的方法存根
}
};
PictureCallback myPictureCallback_RAW=新建PictureCallback(){
@凌驾
PictureTaken上的公共无效(字节[]arg0,摄像头arg1){
//TODO自动生成的方法存根
}
};
PictureCallback myPictureCallback_JPG=新建PictureCallback(){
@凌驾
PictureTaken上的公共无效(字节[]arg0,摄像头arg1){
//TODO自动生成的方法存根
位图位图图片
=位图工厂.decodeByteArray(arg0,0,arg0.length);
}
};
私有类CAPTREAD扩展线程{
@凌驾
公开募捐{
整数计数=0;
而(计数<4){
拍照(myShutterCallback,myPictureCallback_JPG,myPictureCallback_JPG);
计数++;
试一试{
睡眠(3000);
}捕获(中断异常异常){
异常。printStackTrace();
}
}
}
}
}
}

您想在surfaceview中显示拍摄的图像。??否我想在每次拍摄图像后预览相机,直到第四次拍摄。然后,您可以拍摄新的相机预览类,并在每次单击按钮事件时调用它。并将拍摄的图像保存到位图数组中。@segi我们可以在聊天室中继续聊天吗?当然可以,让我们继续。。