效果图
自己写一个软件,简单模仿照相机的功能
主要控件:
用SurfaseView来控制视图
使用Camera来操控照相机
页面很简单
用的是RelativeLayout相对布局
<RelativeLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><SurfaceViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/sv_camera_surface"/><Buttonandroid:layout_width="50dp"android:layout_height="50dp"android:background="@drawable/camera"android:onClick="takePhoto"android:layout_alignParentRight="true"android:layout_centerVertical="true"/></RelativeLayout>
后台代码
public class CameraActivity extends AppCompatActivity {private SurfaceView sv_camera_surface;private Camera camera;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_camera);//获取SurfaceView控件sv_camera_surface = (SurfaceView) findViewById(R.id.sv_camera_surface);//建立回调函数sv_camera_surface.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder surfaceHolder) {//打开照相机camera = Camera.open();//设置摄像参数Camera.Parameters parameters= camera.getParameters();//设置格式parameters.setPictureFormat(PixelFormat.JPEG);//设置质量parameters.set("jpeg-quality",100);//将参数赋给cameracamera.setParameters(parameters);//开启预览效果camera.startPreview();try {//进行展示camera.setPreviewDisplay(sv_camera_surface.getHolder());} catch (IOException e) {e.printStackTrace();}}@Overridepublic void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {}@Overridepublic void surfaceDestroyed(SurfaceHolder surfaceHolder) {//当拍完则停止画面并释放camera.stopPreview();camera.release();}});}//拍照的方法public void takePhoto(View view){//拍照,第三个参为回调函数camera.takePicture(null, null, new Camera.PictureCallback() {@Overridepublic void onPictureTaken(byte[] bytes, Camera camera) {//bytes就是传过来的图片,将bytes格式的图片转码为bitmapBitmap bitmap=BitmapFactory.decodeByteArray(bytes,0,bytes.length);try {//设置时间Calendar calendar=Calendar.getInstance();int year=calendar.get(Calendar.YEAR);int month=calendar.get(Calendar.MONTH);int day=calendar.get(Calendar.DAY_OF_MONTH);int second=calendar.get(Calendar.SECOND);//输出到手机的相册里面,FileOutputStream fos=new FileOutputStream("/mnt/sdcard/dcim/camera/"+year+(month+1)+day+second+".jpg");//设置格式press(pressFormat.JPEG,85,fos);camera.stopPreview();camera.startPreview();} catch (FileNotFoundException e) {e.printStackTrace();}}});}}
配置信息
获得三样权限
<!--写存储--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--获得相机--><uses-permission android:name="android.permission.CAMERA"></uses-permission><!--删除或增加文件--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
用到的素材