Android开发实现拍照功能的方法实例解析
程序员文章站
2023-12-15 19:31:52
本文实例讲述了android开发实现拍照功能的方法。分享给大家供大家参考,具体如下:
解析:
1)判断是否有摄像头checkcamerahardware(this)...
本文实例讲述了android开发实现拍照功能的方法。分享给大家供大家参考,具体如下:
解析:
1)判断是否有摄像头checkcamerahardware(this)
2)获得相机camera = camera.open(0);
3)把相机添加到mpreview = new surfacepreview(this, mcamera);
4)实现拍照 mcamera.autofocus
5)在拍照后使用mcamera.takepicture(null, null, mpicture);方法把图片保存到sdcard
代码实现:
/** * 使用照相机拍照 * @author chen.lin * */ public class cameraactivity extends activity { private camera mcamera;//相机 private surfacepreview mpreview;//视图 private framelayout mframelayout; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_camera_takephoto); mframelayout = (framelayout) findviewbyid(r.id.framelayout); if (checkcamerahardware(this)) { mcamera = getcamera(); mpreview = new surfacepreview(this, mcamera); mframelayout.addview(mpreview); } } /** * 拍照对焦 * @param view */ public void takephoto(view view){ mcamera.autofocus(new autofocuscallback() { @override public void onautofocus(boolean success, camera camera) { mcamera.takepicture(null, null, mpicture); } }); } /** * 拍照后的图片保存 */ private picturecallback mpicture = new picturecallback() { @override public void onpicturetaken(byte[] data, camera camera) { try { file file = new file("/sdcard/file/aa.jpg"); if (!file.exists()) { file.mkdirs(); } fileoutputstream fos = new fileoutputstream(file); fos.write(data); fos.close(); } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } } }; /** * 判断照相机是否存在 * @param context * @return */ private boolean checkcamerahardware(context context){ if (context.getpackagemanager().hassystemfeature(packagemanager.feature_camera)) { return true; } return false; } /** * 初始化照相机 * @return */ public static camera getcamera(){ camera camera = null; try { camera = camera.open(0); } catch (exception e) { e.printstacktrace(); } return camera; } /** * 实现拍照视图 */ @suppresswarnings("deprecation") private class surfacepreview extends surfaceview implements surfaceholder.callback{ private camera mcamera; private surfaceholder mholder; public surfacepreview(context context, camera camera) { super(context); mcamera = camera; mholder = getholder(); mholder.addcallback(this); mholder.settype(surfaceholder.surface_type_push_buffers); } @override public void surfacecreated(surfaceholder holder) { try { mcamera.setpreviewdisplay(mholder); mcamera.startpreview(); } catch (ioexception e) { e.printstacktrace(); } } @override public void surfacechanged(surfaceholder holder, int format, int width, int height) { if (holder.getsurface() == null) { return; } try { mcamera.stoppreview(); mcamera.setpreviewdisplay(mholder); mcamera.startpreview(); } catch (ioexception e) { e.printstacktrace(); } } @override public void surfacedestroyed(surfaceholder holder) { // mcamera = null; } } }
布局:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <framelayout android:id="@+id/framelayout" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" > </framelayout> <button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="takephoto" android:text="拍照" /> </linearlayout>
更多关于android相关内容感兴趣的读者可查看本站专题:《android拍照与图片处理技巧总结》、《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
推荐阅读
-
Android开发实现拍照功能的方法实例解析
-
Android开发实现自定义新闻加载页面功能实例
-
Android开发使用自定义view实现ListView下拉的视差特效功能
-
Android开发实现应用层面屏蔽状态栏的方法小结
-
Android编程实现VideoView循环播放功能的方法
-
Android编程实现自定义分享列表ACTION_SEND功能的方法
-
Android Studio中快捷键实现try catch等功能包含代码块的实现方法
-
Android开发实现消除屏幕锁的方法
-
Android开发基于Drawable实现圆角矩形的方法
-
Android开发实现读取assets目录下db文件的方法示例