时间:2021-05-20
本文记录了用自定义Camera实现的简单拍照功能。
Camera类在5.0以后不推荐使用了,取而代之的是android.hardware.camera2包下的类,本文使用Camera。
我们首先自定义一个View去继承SurfaceView:
代码没什么难度,在View创建的时候完成Camera的初始化,然后对Camera进行参数的设置(图片尺寸,质量之类的),最后别忘了在View销毁的时候对资源进行释放。
控件定义完了之后我们就要去使用它,在布局文件中添加就OK:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" > <com.padoon.cameratest.CameraSurfaceView android:id="@+id/sv_camera" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="4"/> <ImageView android:id="@+id/img_take_photo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_gravity="bottom" android:layout_marginBottom="10dp" android:layout_marginRight="10dp" android:src="@mipmap/icon_camera"/></RelativeLayout>然后在Activity中去完成拍照功能:
public class CameraActivity extends AppCompatActivity { private boolean isClick = true; private static final String PATH_IMAGES = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "easy_check"; private CameraSurfaceView mCameraSurfaceView; //拍照快门的回调 private Camera.ShutterCallback mShutterCallback = new Camera.ShutterCallback() { @Override public void onShutter() { } }; //拍照完成之后返回原始数据的回调 private Camera.PictureCallback rawPictureCallback = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { } }; //拍照完成之后返回压缩数据的回调 private Camera.PictureCallback jpegPictureCallback = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { mCameraSurfaceView.startPreview(); saveFile(data); Toast.makeText(CameraActivity.this, "拍照成功", Toast.LENGTH_SHORT).show(); isClick = true; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView img_take_photo = (ImageView) findViewById(R.id.img_take_photo); mCameraSurfaceView = (CameraSurfaceView) findViewById(R.id.sv_camera); img_take_photo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { takePhoto(); } }); } public void takePhoto() { if (isClick) { isClick = false; mCameraSurfaceView.takePicture(mShutterCallback, rawPictureCallback, jpegPictureCallback); } } //保存图片到硬盘 public void saveFile(byte[] data) { String fileName = UUID.randomUUID().toString() + ".jpg"; FileOutputStream outputStream = null; try { File file = new File(PATH_IMAGES); if (!file.exists()) { file.mkdirs(); } outputStream = new FileOutputStream(PATH_IMAGES + File.separator + fileName); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream); bufferedOutputStream.write(data, 0, data.length); } catch (Exception e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }}最后记得添加拍照跟磁盘操作权限:
<uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>到这一个非常简单的拍照Demo就完成了,只能当做Demo使用,离开发正式使用还有一段的距离,再次特地记录一下。
下载:源码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能。首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件:activ
本文实例讲述了Android自定义照相机Camera出现黑屏的解决方法。分享给大家供大家参考,具体如下:对于一些手机,像HTC,当自定义Camera时,调用Ca
本文实例为大家分享了android自定义Camera拍照并查看图片的具体代码,供大家参考,具体内容如下1、打开相机a.预览拍摄图片,需用到SurfaceView
ImageSelector简介Android自定义相册,实现了拍照、图片选择(单选/多选)、ImageLoader无绑定任由开发者选择https://githu
前言在Android开发中,我们有时需要实现类似IOS的对话框。今天我就来总结下,如何通过自定义的开发来实现类似的功能。自定义Dialog我们知道Android