android 自定义相机
2016-01-05 18:58
423 查看
[code]/** * 在Activity 和 SurfaceView的声明周期方法里, 管理相机的生命周期 * 在点击事件之中,设置拍照的参数,然后在回调方法里面获取到拍照之后的路径 */ public class CamaraSurfaceView extends Activity implements Callback, OnClickListener { private Camera camera; private SurfaceView surface; private SurfaceHolder mHolder; //相机拍照之后的回调 private PictureCallback TakeCallBack=new PictureCallback() { @Override public void onPictureTaken(byte[] arg0, Camera arg1) { //将拍照的数据写入到文件中 String path=Environment.getExternalStorageDirectory()+"/"+System.currentTimeMillis()+".jpg"; File tempFile=new File(path); FileOutputStream fos=null; try { if(!tempFile.exists()){ tempFile.createNewFile(); } fos=new FileOutputStream(tempFile); fos.write(arg0); fos.flush(); Intent intent=new Intent(CamaraSurfaceView.this,MainActivity.class); intent.putExtra("path",tempFile.getAbsolutePath()); setResult(MainActivity.REQUEST_CAPTURE, intent); CamaraSurfaceView.this.finish(); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO 自动生成的方法存根 super.onCreate(savedInstanceState); this.setContentView(R.layout.camaralayout); surface=(SurfaceView) this.findViewById(R.id.surface); mHolder=surface.getHolder(); mHolder.addCallback(this); this.findViewById(R.id.cap).setOnClickListener(this); } /** * 准备相机 */ @Override protected void onResume() { // TODO 自动生成的方法存根 super.onResume(); if(camera==null ){ camera=getCamera(); //绑定相机与显示界面 preViewCamera(camera,mHolder); } } /** * 释放相机资源 */ @Override protected void onPause() { // TODO 自动生成的方法存根 super.onPause(); releaseCamera(camera); } /** * 获取相机资源 * @return */ public Camera getCamera(){ Camera camera=null; try { camera=Camera.open(); } catch (Exception e) { camera=null; } return camera; } /** * 释放相机资源 * @param camera */ public void releaseCamera(Camera camera){ if(camera!=null){ camera.release(); camera=null; } } /** * 将相机与展示界面绑定 * @param camera * @param mHolder */ public void preViewCamera(Camera camera,SurfaceHolder mHolder){ try { if(camera!=null && mHolder!=null){ camera.setPreviewDisplay(mHolder); //将相机切换到竖屏显示 camera.setDisplayOrientation(90); camera.startPreview(); } } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { if(camera!=null){ camera.stopPreview(); preViewCamera(camera,mHolder); } } @Override public void surfaceCreated(SurfaceHolder arg0) { preViewCamera(camera,mHolder); } @Override public void surfaceDestroyed(SurfaceHolder arg0) { // TODO 自动生成的方法存根 releaseCamera(camera); } @Override public void onClick(View arg0) { switch(arg0.getId()){ case R.id.cap: //设置相机的参数 if(camera!=null){ Parameters params=camera.getParameters(); //设置拍照的格式 params.setPictureFormat(ImageFormat.JPEG); params.setPreviewSize(800, 400); //设置相机对焦的模式 params.setFlashMode(Camera.Parameters.FOCUS_MODE_AUTO); //相机对焦完成之后 camera.autoFocus(new AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera arg1) { if(success){ camera.takePicture(null, null, TakeCallBack); } } }); } break; } } }
相关文章推荐
- android 系统相机
- 在Android程序中使用已有的SQLite数据库
- Android - JNI静态(static)载入OpenCV
- android解析xml简单分析
- Android中捕获TTextView文本中的链接点击事件方法
- android中Rect类的使用
- Android中AsyncTask的简单入手方式
- Android 系统应用调用,intent 的使用方法总结
- Android高效显示图片详解(三)
- Android高效显示图片详解(二)
- Android studio jni编写步骤,流程
- Android高效显示图片详解(一)
- android 设置头像并保存到本地
- Android 9-patch 九图的制作与使用
- Android TextView前加图标垂直居中第一行(仿大众点评购买须知/提示语)
- Android 应用程序升级到 5.0 需要注意的问题
- android中的文件操作详解以及内部存储和外部存储
- Android 使用动态加载框架DL进行插件化开发
- 细说:AndroidStudio插件
- 在Android中 使用 java.net.URI 与 android.net.Uri 的区别