不废话,直接上代码

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(安卓)的AsyncTask使用
  2. android沉浸式状态栏实现,android沉浸式状态栏工具类
  3. Android(安卓)APP增量升级的实现方式
  4. Android(安卓)上实现微信微博上的应用语言切换
  5. Android巴士转发
  6. android截屏并将截图缩放
  7. 浅谈Java中Collections.sort对List排序的两种方法
  8. mybatisplus的坑 insert标签insert into select无参数问题的解决
  9. Python技巧匿名函数、回调函数和高阶函数

随机推荐

  1. android从网站获取json接口数据并放置到s
  2. android 音乐信息乱码处理
  3. Android中自定义ProgressBar
  4. 2011.10.17——— android 多点触控
  5. Android模拟器无法启动
  6. 逆向工具/反编译工具 集合
  7. cocos creator 编译通不过, 出现 The "and
  8. Android(安卓)权限被拒绝,跳转至权限设置
  9. Android实现页面跳转
  10. AndroidManifest中activity属性设置大全