android自定义拍照

调用系统相机,然后在自己的surfaceview上预览,拍照,不废话,直接上源码

  1 package com.example.customecamera;
  2 
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.io.FileOutputStream;
  6 import java.io.IOException;
  7 
  8 import android.app.Activity;
  9 import android.content.Intent;
 10 import android.graphics.Bitmap;
 11 import android.graphics.BitmapFactory;
 12 import android.graphics.ImageFormat;
 13 import android.hardware.Camera;
 14 import android.hardware.Camera.AutoFocusCallback;
 15 import android.hardware.Camera.Parameters;
 16 import android.hardware.Camera.PictureCallback;
 17 import android.os.Bundle;
 18 import android.os.Environment;
 19 import android.view.SurfaceHolder;
 20 import android.view.SurfaceView;
 21 import android.view.View;
 22 
 23 public class MainActivity extends Activity implements SurfaceHolder.Callback {
 24 
 25     SurfaceView mSurfaceview;
 26     Camera mCamera;
 27     SurfaceHolder mHolder;
 28 
 29     @Override
 30     protected void onCreate(Bundle savedInstanceState) {
 31         super.onCreate(savedInstanceState);
 32         setContentView(R.layout.activity_main);
 33         mSurfaceview = (SurfaceView) findViewById(R.id.surfaceview);
 34         mHolder = mSurfaceview.getHolder();
 35         mHolder.addCallback(this);
 36     }
 37     
 38     PictureCallback callback =    new PictureCallback() {
 39         
 40         @Override
 41         public void onPictureTaken(byte[] data, Camera camera) {
 42             if(data != null) {
 43                 try {
 44                     File file = new File(Environment.getExternalStorageDirectory() + "/" + "temp.jpg");
 45                     FileOutputStream fos = new FileOutputStream(file);
 46                     fos.write(data, 0, data.length);
 47                     Intent  intent = new Intent(MainActivity.this , OtherActivity.class);
 48                     intent.putExtra("pic_path", file.getAbsolutePath());
 49                     startActivity(intent);
 50                 } catch (FileNotFoundException e) {
 51                     // TODO Auto-generated catch block
 52                     e.printStackTrace();
 53                 } catch (IOException e) {
 54                     // TODO Auto-generated catch block
 55                     e.printStackTrace();
 56                 }
 57                 
 58             }
 59         }
 60         
 61     };
 62 
 63     @SuppressWarnings("deprecation")
 64     public void caputer(View v) {
 65         Parameters parameters = mCamera.getParameters();
 66         parameters.setPictureFormat(ImageFormat.JPEG);
 67         parameters.setPictureSize(400, 600);
 68         parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
 69         mCamera.autoFocus(new AutoFocusCallback() {
 70             
 71             @Override
 72             public void onAutoFocus(boolean success, Camera camera) {
 73                 mCamera.takePicture(null, null, callback);
 74             }
 75         });
 76     
 77     }
 78 
 79     public Camera getCamera() {
 80         Camera camera = Camera.open();
 81         return camera;
 82     }
 83 
 84     public void relaseCamer() {
 85         if (mCamera != null) {
 86             mCamera.setPreviewCallback(null);
 87             mCamera.stopPreview();
 88             mCamera.release();
 89             mCamera = null;
 90         }
 91     }
 92 
 93     public void startPreview(Camera camera, SurfaceHolder holder) {
 94         try {
 95             camera.setPreviewDisplay(holder);
 96             camera.setDisplayOrientation(90);
 97             camera.startPreview();
 98         } catch (IOException e) {
 99             // TODO Auto-generated catch block
100             e.printStackTrace();
101         }
102     }
103 
104     @Override
105     protected void onPause() {
106         super.onPause();
107         relaseCamer();
108     }
109 
110     @Override
111     protected void onResume() {
112         super.onResume();
113         if (mCamera == null) {
114             mCamera = getCamera();
115             if(mHolder != null) {
116                 startPreview(mCamera, mHolder);
117             }
118         }
119     }
120 
121     @Override
122     public void surfaceCreated(SurfaceHolder holder) {
123         startPreview(mCamera, mHolder);
124     }
125 
126     @Override
127     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
128         mCamera.stopPreview();
129         startPreview(mCamera, mHolder);
130     }
131 
132     @Override
133     public void surfaceDestroyed(SurfaceHolder holder) {
134         relaseCamer();
135     }
136     
137 }
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context="${relativePackage}.${activityClass}" >
 6 
 7    
 8     <SurfaceView 
 9         android:id="@+id/surfaceview"
10         android:layout_width="match_parent"
11         android:layout_height="400dp" />
12      <Button
13         android:id="@+id/button1"
14         android:layout_below="@id/surfaceview"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:layout_centerHorizontal="true"
18         android:onClick="caputer"
19         android:text="拍照" />
20 
21 </RelativeLayout>
 1 package com.example.customecamera;
 2 
 3 import android.app.Activity;
 4 import android.graphics.Bitmap;
 5 import android.graphics.BitmapFactory;
 6 import android.graphics.Matrix;
 7 import android.os.Bundle;
 8 import android.text.TextUtils;
 9 import android.widget.ImageView;
10 
11 public class OtherActivity extends Activity {
12     ImageView iv;
13     
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.other_activity);
18         iv = (ImageView) findViewById(R.id.imageView1);
19         String path = getIntent().getStringExtra("pic_path");
20         if(!TextUtils.isEmpty(path)) {
21             Bitmap bitmap = BitmapFactory.decodeFile(path);
22             Matrix matrix = new Matrix();
23             matrix.postRotate(90);
24             bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
25             if(bitmap != null) {
26                 iv.setImageBitmap(bitmap);
27             }
28         }
29     }
30 
31 }
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <ImageView
 8         android:id="@+id/imageView1"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_gravity="center"       
12 />
13 
14 </LinearLayout>
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.customecamera"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk
 8         android:minSdkVersion="8"
 9         android:targetSdkVersion="21" />
10 
11     <application
12         android:allowBackup="true"
13         android:icon="@drawable/ic_launcher"
14         android:label="@string/app_name"
15         android:theme="@style/AppTheme" >
16         <activity
17             android:name=".MainActivity"
18             android:label="@string/app_name" >
19             <intent-filter>
20                 <action android:name="android.intent.action.MAIN" />
21 
22                 <category android:name="android.intent.category.LAUNCHER" />
23             </intent-filter>
24         </activity>
25         <activity android:name=".OtherActivity" > 
26         </activity>
27     </application>
28 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
29 <uses-permission android:name="android.permission.CAMERA"/>
30 </manifest>
原文地址:https://www.cnblogs.com/androidsihai/p/6033435.html