不废话,直接上代码

package com.kelly.takepicture;import java.io.File;import java.io.FileOutputStream;import java.util.Date;import android.annotation.SuppressLint;import android.app.Activity;import android.hardware.Camera;import android.hardware.Camera.AutoFocusCallback;import android.hardware.Camera.PictureCallback;import android.os.AsyncTask;import android.os.Build;import android.os.Bundle;import android.os.Environment;import android.text.format.DateFormat;import android.util.Log;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;public class MainActivity extends Activity {private View butlayout;private SurfaceView surfaceView;private Camera camera;private File jpgFile;private Camera.Parameters parameters;private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 设置全屏显示requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.activity_main);surfaceView = (SurfaceView) findViewById(R.id.surfaceview);surfaceView.getHolder().setSizeFromLayout();surfaceView.getHolder().setKeepScreenOn(true);surfaceView.getHolder().addCallback(new SurfaceCallback());butlayout = findViewById(R.id.buttonlayout);}// 点击屏幕时,对焦和拍照按钮 出现public boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {butlayout.setVisibility(ViewGroup.VISIBLE);return true;}return super.onTouchEvent(event);}private class SurfaceCallback implements Callback {@SuppressLint("InlinedApi")public void surfaceCreated(SurfaceHolder holder) {if (camera == null) {camera = Camera.open();// 打开摄像头try {camera.setPreviewDisplay(holder);initCamera();camera.startPreview();// camera.setDisplayOrientation(90);// parameters.set("rotation", 90);} catch (Exception e) {e.printStackTrace();}}}public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// 实现自动对焦camera.autoFocus(new AutoFocusCallback() {public void onAutoFocus(boolean success, Camera camera) {if (success) {initCamera();// 实现相机的参数初始化camera.cancelAutoFocus();// 只有加上了这一句,才会自动对焦。}}});}public void surfaceDestroyed(SurfaceHolder holder) {if (camera != null) {camera.stopPreview();camera.release();camera = null;}}}public void takepicture(View view) {switch (view.getId()) {// 拍照case R.id.but_takepic:camera.takePicture(null, null, new MyPictureCallback());break;case R.id.but_autofocus:// 对焦camera.autoFocus(null);break;default:break;}}private class MyPictureCallback implements PictureCallback {public void onPictureTaken(byte[] data, Camera camera) {// 保存 图片new SavePictureTask().execute(data);camera.startPreview();}}/** * 使用异步任务 进行文件操作 *  * @author Administrator *  */class SavePictureTask extends AsyncTask {protected String doInBackground(byte[]... params) {String fname = DateFormat.format("yyyyMMddhhmmss", new Date()).toString() + ".jpg";jpgFile = new File(Environment.getExternalStorageDirectory() + "/"+ fname);try {FileOutputStream fos = new FileOutputStream(jpgFile.getPath());fos.write(params[0]);fos.close();} catch (Exception e) {e.printStackTrace();}return null;}}// 相机参数的初始化设置@SuppressLint("InlinedApi")private void initCamera() {parameters = camera.getParameters();Log.i(TAG, parameters.flatten());parameters.setJpegThumbnailQuality(100);// 设置质量// parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);//闪光灯parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);// 1连续对焦// 下面两句调整照片质量,只针对小米2S,不同手机,参数不同// parameters.setPreviewSize(1920, 1088);// parameters.setPictureSize(4208, 3120);setDispaly(parameters, camera);camera.setParameters(parameters);camera.startPreview();camera.cancelAutoFocus();// 2如果要实现连续的自动对焦,这一句必须加上}// 控制图像的正确显示方向@SuppressWarnings("deprecation")private void setDispaly(Camera.Parameters parameters, Camera camera) {if (Integer.parseInt(Build.VERSION.SDK) >= 8) {camera.setDisplayOrientation(90);} else {parameters.setRotation(90);}}}
源码下载: 点击打开链接

参考:http://blog.csdn.net/geekstart/article/details/13630009

更多相关文章

  1. Android参数设置父布局集体宽高
  2. Android 编译流程解析01-AppPlugin初始化
  3. android am 启动activity service or broadcast及参数传递
  4. 混合开发-H5 调用Android 的相册和照相机上传图片的问题
  5. Android Studio第三十八期 - HIOS跳转协议解决URI跳转原生页面并
  6. android 软键盘隐藏 activity初始化时edittext聚焦
  7. Android调用相机接口

随机推荐

  1. Android(安卓)屏幕旋转操作Demo
  2. 如何正常关闭android应用
  3. Android开发之视图动画基础
  4. 8.1、Android中为Intent附加数据的两种写
  5. Android简单判断是否联网
  6. Android程序的真正入口Application
  7. Android——Intent简介
  8. Android 导入 library 工程库
  9. Android原生音量控制【转】
  10. Android控件笔记——多状态按钮ToggleBut