First, layout file 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" > <surfaceviewandroid: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 =< Span class= "Hljs-value" > "wrap_content" android:layout_height = "wrap_content" android:layout_alignparentbottom = "true" android:layout_alignparentright = "true" android:layout_marginright =" 5DP " android:onclick =" Takepictur E " 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 =" Takepi Cture " android:text =" @string/autofocus "/> </relativelayout></framelayout>
Second, Mainactivity.java
ImportJava.io.File;ImportJava.io.FileOutputStream;Importandroid.app.Activity;ImportAndroid.hardware.Camera;ImportAndroid.hardware.Camera.PictureCallback;ImportAndroid.os.Bundle;ImportAndroid.os.Environment;ImportAndroid.view.MotionEvent;ImportAndroid.view.SurfaceHolder;ImportAndroid.view.SurfaceHolder.Callback;ImportAndroid.view.SurfaceView;ImportAndroid.view.View;ImportAndroid.view.ViewGroup;ImportAndroid.view.Window;ImportAndroid.view.WindowManager; Public class mainactivity extends Activity { PrivateView layout;PrivateCamera 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 (NewSurfacecallback ()); } Public void takepicture(View v) {if(Camera! =NULL) {Switch(V.getid ()) { CaseR.id.takepicture:camera.takepicture (NULL,NULL,NewMypicturecallback ()); Break; CaseR.id.autofocus:camera.autofocus (NULL); Break; } } }Private Final class mypicturecallback implements picturecallback { Public void Onpicturetaken(byte[] data, camera camera) {Try{File Jpgfile =NewFile (Environment.getexternalstoragedirectory (), System.currenttimemillis () +". jpg"); FileOutputStream OutStream =NewFileOutputStream (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 ();//Turn on the cameraCamera.parameters Parameters = Camera.getparameters ();//LOG.I ("Mainactivity", Parameters.flatten ());Parameters.setpreviewsize ( -,480); Parameters.setpreviewframerate (5); Parameters.setpicturesize (1024x768,768); Parameters.setjpegquality ( the); Camera.setparameters (parameters); Camera.setpreviewdisplay (holder); Camera.startpreview ();//Start preview}Catch(Exception e) {E.printstacktrace (); } } Public void surfacechanged(Surfaceholder holder,intFormatintWidthintHeight) {} 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); }}
Third, add permissions
<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" />
The effect is as follows:
The realization of the camera function of Android phone