本文实例为大家讲解如何轻松实现Android手机拍照功能,分享给大家供大家参考。具体如下:
一、布局文件main.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id="@+id/surfaceView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <RelativeLayout android:id="@+id/buttonlayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="gone" > <Button android:id="@+id/takepicture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:onClick="takepicture" android:text="@string/takepicture" /> <Button android:id="@+id/autofocus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/takepicture" android:layout_marginRight="20dp" android:layout_toLeftOf="@id/takepicture" android:onClick="takepicture" android:text="@string/autofocus" /> </RelativeLayout> </FrameLayout>
二、MainActivity.java
import java.io.File; import java.io.FileOutputStream; import android.app.Activity; import android.hardware.Camera; import android.hardware.Camera.PictureCallback; import android.os.Bundle; import android.os.Environment; 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 layout; private Camera camera; @Override public 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.main); layout = this.findViewById(R.id.buttonlayout); SurfaceView surfaceView = (SurfaceView) this .findViewById(R.id.surfaceView); surfaceView.getHolder() .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceView.getHolder().setFixedSize(176, 144); surfaceView.getHolder().setKeepScreenOn(true); surfaceView.getHolder().addCallback(new SurfaceCallback()); } public void takepicture(View v) { if (camera != null) { switch (v.getId()) { case R.id.takepicture: camera.takePicture(null, null, new MyPictureCallback()); break; case R.id.autofocus: camera.autoFocus(null); break; } } } private final class MyPictureCallback implements PictureCallback { public void onPictureTaken(byte[] data, Camera camera) { try { File jpgFile = new File( Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg"); FileOutputStream outStream = new FileOutputStream(jpgFile); outStream.write(data); outStream.close(); camera.startPreview(); } catch (Exception e) { e.printStackTrace(); } } } private final class SurfaceCallback implements Callback { public void surfaceCreated(SurfaceHolder holder) { try { camera = Camera.open();// 打开摄像头 Camera.Parameters parameters = camera.getParameters(); // Log.i("MainActivity", parameters.flatten()); parameters.setPreviewSize(800, 480); parameters.setPreviewFrameRate(5); parameters.setPictureSize(1024, 768); parameters.setJpegQuality(80); camera.setParameters(parameters); camera.setPreviewDisplay(holder); camera.startPreview();// 开始预览 } catch (Exception e) { e.printStackTrace(); } } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } public void surfaceDestroyed(SurfaceHolder holder) { if (camera != null) { camera.release(); camera = null; } } } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { layout.setVisibility(ViewGroup.VISIBLE); return true; } return super.onTouchEvent(event); } }
三、添加权限
<uses-permission android:name="android.permission.CAMERA" /> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
效果如下:
希望本文所述对大家学习Android软件编程有所帮助。
本文向大家介绍android实现手机App实现拍照功能示例,包括了android实现手机App实现拍照功能示例的使用技巧和注意事项,需要的朋友参考一下 实现手机App实现拍照功能结果如下 第一步: activity_takephoto.xml布局用SurfaceView 第二步:TakephotoActivity类 第三步:在AndroidManifest.xml中加权限 以上就是本文的全部内容,
本文向大家介绍Android实现拍照截图功能,包括了Android实现拍照截图功能的使用技巧和注意事项,需要的朋友参考一下 本文将向大家展示如何拍照截图。 先看看效果图: 拍照截图有点儿特殊,要知道,现在的Android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的。因此,我们不能像对待相册截图一样使用Bitmap小图,无论大图小图都统一使用Uri进行操作。 一、首先准备好需要使用到的
本文向大家介绍Android调用手机拍照功能的方法,包括了Android调用手机拍照功能的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android调用手机拍照功能的方法。分享给大家供大家参考。具体如下: 一、main.xml布局文件: 二、核心代码: 希望本文所述对大家的Android程序设计有所帮助。
本文向大家介绍Android4.4 WebAPI实现拍照上传功能,包括了Android4.4 WebAPI实现拍照上传功能的使用技巧和注意事项,需要的朋友参考一下 网上有很多关于拍照上传的实现方法,如果用新版本android去运行有可能会发现根本实现不了。主要原因是android从4.4版本开始通过intent.ACTION_GET_CONTENT打开选择器后,getData()返回的URI没有包
本文向大家介绍Android使用系统自带的相机实现一键拍照功能,包括了Android使用系统自带的相机实现一键拍照功能的使用技巧和注意事项,需要的朋友参考一下 今天分享的是用系统自带的相机实现一键拍照功能。
本文向大家介绍PHP+Javascript实现在线拍照功能实例,包括了PHP+Javascript实现在线拍照功能实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP+Javascript实现在线拍照功能。分享给大家供大家参考。具体如下: 我们在一些WEB应用中可能会遇到这样的情况,用户需要自己现场拍照并上传到会员系统。比如驾校采集指纹拍照流程、考试现场采集照片等。我们今天要讲的是如