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我们可以在聊天室中继续聊天吗?当然可以,让我们继续。。