大家好,这是一个简单的拍照功能,很简单的界面,一个显示图像区域SurfaceView一个“拍照”按钮。直接上代码!
1、CameraDemoActivity.java(主界面)
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">package</span> org.winplus.camera; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> java.io.File; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> java.io.FileOutputStream; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> java.io.IOException; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> java.util.Date; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.app.Activity; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.content.pm.ActivityInfo; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.graphics.PixelFormat; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.hardware.Camera; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.os.AsyncTask; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.os.Bundle; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.os.Environment; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.text.format.DateFormat; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.util.Log; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.KeyEvent; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.SurfaceHolder; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.SurfaceView; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.View; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.Window; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.View.OnClickListener; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.widget.Button; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">class</span> CameraDemoActivity <span class="keyword" style="font-weight: bold; color: #0000ff;">extends</span> Activity{ </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">final</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">static</span> String TAG = <span class="string" style="color: #009900;">“CameraActivity”</span>; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> SurfaceView surfaceView; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> SurfaceHolder surfaceHolder; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> Camera camera; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> File picture; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> Button btnSave; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> onCreate(Bundle savedInstanceState) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">super</span>.onCreate(savedInstanceState); </span>
- <span style="color: black;"> setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">this</span>.requestWindowFeature(Window.FEATURE_NO_TITLE); </span>
- <span style="color: black;"> setContentView(R.layout.main); </span>
- <span style="color: black;"> setupViews(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> setupViews(){ </span>
- <span style="color: black;"> surfaceView = (SurfaceView) findViewById(R.id.camera_preview); <span class="comment" style="color: #999999;">// Camera interface to instantiate components</span> </span>
- <span style="color: black;"> surfaceHolder = surfaceView.getHolder(); <span class="comment" style="color: #999999;">// Camera interface to instantiate components</span> </span>
- <span style="color: black;"> surfaceHolder.addCallback(surfaceCallback); <span class="comment" style="color: #999999;">// Add a callback for the SurfaceHolder</span> </span>
- <span style="color: black;"> surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> btnSave = (Button) findViewById(R.id.save_pic); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> btnSave.setOnClickListener(<span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> OnClickListener() { </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> onClick(View v) { </span>
- <span style="color: black;"> takePic(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> }); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">boolean</span> onKeyDown(<span class="keyword" style="font-weight: bold; color: #0000ff;">int</span> keyCode, KeyEvent event) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">if</span> (keyCode == KeyEvent.KEYCODE_CAMERA </span>
- <span style="color: black;"> || keyCode == KeyEvent.KEYCODE_SEARCH) { </span>
- <span style="color: black;"> takePic(); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">return</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">true</span>; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">return</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">super</span>.onKeyDown(keyCode, event); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> takePic() { </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> camera.stopPreview();<span class="comment" style="color: #999999;">// stop the preview</span> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> camera.takePicture(<span class="keyword" style="font-weight: bold; color: #0000ff;">null</span>, <span class="keyword" style="font-weight: bold; color: #0000ff;">null</span>, pictureCallback); <span class="comment" style="color: #999999;">// picture</span> </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #999999;">// Photo call back</span> </span>
- <span style="color: black;"> Camera.PictureCallback pictureCallback = <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> Camera.PictureCallback() { </span>
- <span style="color: black;"> <span class="comment" style="color: #999999;">//@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> onPictureTaken(<span class="keyword" style="font-weight: bold; color: #0000ff;">byte</span>[] data, Camera camera) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> SavePictureTask().execute(data); </span>
- <span style="color: black;"> camera.startPreview(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> }; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #999999;">// save pic</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">class</span> SavePictureTask <span class="keyword" style="font-weight: bold; color: #0000ff;">extends</span> AsyncTask<<span class="keyword" style="font-weight: bold; color: #0000ff;">byte</span>[], String, String> { </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">protected</span> String doInBackground(<span class="keyword" style="font-weight: bold; color: #0000ff;">byte</span>[]… params) { </span>
- <span style="color: black;"> String fname = DateFormat.format(<span class="string" style="color: #009900;">“yyyyMMddhhmmss”</span>, <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> Date()).toString()+<span class="string" style="color: #009900;">“.jpg”</span>; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> Log.i(TAG, <span class="string" style="color: #009900;">“fname=”</span>+fname+<span class="string" style="color: #009900;">“;dir=”</span>+Environment.getExternalStorageDirectory()); </span>
- <span style="color: black;"> <span class="comment" style="color: #999999;">//picture = new File(Environment.getExternalStorageDirectory(),fname);// create file</span> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> picture = <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> File(Environment.getExternalStorageDirectory()+<span class="string" style="color: #009900;">“/”</span>+fname); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">try</span> { </span>
- <span style="color: black;"> FileOutputStream fos = <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> FileOutputStream(picture.getPath()); <span class="comment" style="color: #999999;">// Get file output stream</span> </span>
- <span style="color: black;"> fos.write(params[<span class="number" style="color: #c00000;"></span>]); <span class="comment" style="color: #999999;">// Written to the file</span> </span>
- <span style="color: black;"> fos.close(); </span>
- <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #0000ff;">catch</span> (Exception e) { </span>
- <span style="color: black;"> e.printStackTrace(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">return</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">null</span>; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #999999;">// SurfaceHodler Callback handle to open the camera, off camera and photo size changes</span> </span>
- <span style="color: black;"> SurfaceHolder.Callback surfaceCallback = <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> SurfaceHolder.Callback() { </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> surfaceCreated(SurfaceHolder holder) { </span>
- <span style="color: black;"> Log.i(TAG, <span class="string" style="color: #009900;">“surfaceCallback====”</span>); </span>
- <span style="color: black;"> camera = Camera.open(); <span class="comment" style="color: #999999;">// Turn on the camera</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">try</span> { </span>
- <span style="color: black;"> camera.setPreviewDisplay(holder); <span class="comment" style="color: #999999;">// Set Preview</span> </span>
- <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #0000ff;">catch</span> (IOException e) { </span>
- <span style="color: black;"> camera.release();<span class="comment" style="color: #999999;">// release camera</span> </span>
- <span style="color: black;"> camera = <span class="keyword" style="font-weight: bold; color: #0000ff;">null</span>; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> surfaceChanged(SurfaceHolder holder, <span class="keyword" style="font-weight: bold; color: #0000ff;">int</span> format, <span class="keyword" style="font-weight: bold; color: #0000ff;">int</span> width, </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">int</span> height) { </span>
- <span style="color: black;"> Log.i(TAG,<span class="string" style="color: #009900;">“====surfaceChanged”</span>); </span>
- <span style="color: black;"> Camera.Parameters parameters = camera.getParameters(); <span class="comment" style="color: #999999;">// Camera parameters to obtain</span> </span>
- <span style="color: black;"> parameters.setPictureFormat(PixelFormat.JPEG);<span class="comment" style="color: #999999;">// Setting Picture Format</span> </span>
- <span style="color: black;"><span class="comment" style="color: #999999;">// parameters.set(“rotation”, 180); // Arbitrary rotation</span> </span>
- <span style="color: black;"> camera.setDisplayOrientation(<span class="number" style="color: #c00000;"></span>); </span>
- <span style="color: black;"><span class="comment" style="color: #999999;">// parameters.setPreviewSize(400, 300); // Set Photo Size</span> </span>
- <span style="color: black;"> camera.setParameters(parameters); <span class="comment" style="color: #999999;">// Setting camera parameters</span> </span>
- <span style="color: black;"> camera.startPreview(); <span class="comment" style="color: #999999;">// Start Preview</span> </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> surfaceDestroyed(SurfaceHolder holder) { </span>
- <span style="color: black;"> Log.i(TAG,<span class="string" style="color: #009900;">“====surfaceDestroyed”</span>); </span>
- <span style="color: black;"> camera.stopPreview();<span class="comment" style="color: #999999;">// stop preview</span> </span>
- <span style="color: black;"> camera.release(); <span class="comment" style="color: #999999;">// Release camera resources</span> </span>
- <span style="color: black;"> camera = <span class="keyword" style="font-weight: bold; color: #0000ff;">null</span>; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> }; </span>
- <span style="color: black;">} </span>
<span style="color: #362e2b;">2、main.xml(布局文件)</span>
- <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><?</span><span class="tag-name" style="font-weight: bold; color: #993300;">xml</span> <span class="attribute" style="color: red;">version</span>=<span class="attribute-value" style="color: blue;">“1.0”</span> <span class="attribute" style="color: red;">encoding</span>=<span class="attribute-value" style="color: blue;">“utf-8”</span><span class="tag" style="font-weight: bold; color: #993300;">?></span> </span>
- <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">LinearLayout</span> <span class="attribute" style="color: red;">xmlns:android</span>=<span class="attribute-value" style="color: blue;">“http://schemas.android.com/apk/res/android”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_width</span>=<span class="attribute-value" style="color: blue;">“fill_parent”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_height</span>=<span class="attribute-value" style="color: blue;">“fill_parent”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:orientation</span>=<span class="attribute-value" style="color: blue;">“vertical”</span> <span class="tag" style="font-weight: bold; color: #993300;">></span> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">android.view.SurfaceView</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:id</span>=<span class="attribute-value" style="color: blue;">“@+id/camera_preview”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_width</span>=<span class="attribute-value" style="color: blue;">“800dip”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_height</span>=<span class="attribute-value" style="color: blue;">“600dip”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_alignParentTop</span>=<span class="attribute-value" style="color: blue;">“true”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_centerInParent</span>=<span class="attribute-value" style="color: blue;">“true”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_gravity</span>=<span class="attribute-value" style="color: blue;">“center_vertical|center_horizontal”</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">Button</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:id</span>=<span class="attribute-value" style="color: blue;">“@+id/save_pic”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_width</span>=<span class="attribute-value" style="color: blue;">“fill_parent”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_height</span>=<span class="attribute-value" style="color: blue;">“wrap_content”</span> </span>
- <span style="color: black;"> <span class="attribute" style="color: red;">android:text</span>=<span class="attribute-value" style="color: blue;">“@string/txt_save”</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"></</span><span class="tag-name" style="font-weight: bold; color: #993300;">LinearLayout</span><span class="tag" style="font-weight: bold; color: #993300;">></span> </span>
<br style="color: #362e2b;" /><span style="color: #362e2b;">3、别忘了添加权限:</span>
<div class="dp-highlighter bg_html" style="color: #362e2b;">
- <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">uses-permission</span> <span class="attribute" style="color: red;">android:name</span>=<span class="attribute-value" style="color: blue;">“android.permission.CAMERA”</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">uses-feature</span> <span class="attribute" style="color: red;">android:name</span>=<span class="attribute-value" style="color: blue;">“android.hardware.camera”</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span>
- <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">uses-feature</span> <span class="attribute" style="color: red;">android:name</span>=<span class="attribute-value" style="color: blue;">“android.hardware.camera.autofocus”</span> <span class="attribute" style="color: red;">android:required</span>=<span class="attribute-value" style="color: blue;">“false”</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span>
</div>
<div class="dp-highlighter bg_html" style="color: #362e2b;">
- <span style="color: black;"> </span>
</div>
[源码下载==》](http://download.csdn.net/detail/tangcheng_ok/3874071)
原创文章,转载请注明出处:http://www.blog.csdn.net/tangcheng_ok
💬 评论