• 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>
  • 相关阅读:
    数据库连接池实现
    Linux array_vpnc
    MVC小结
    Linux和Windows下 classpath 的差异
    无法删除DLL文件解决方法(转)
    电信工程管理方法
    常用设计思想
    MAX262使用说明
    基于FPGA的FIR滤波器(草稿)
    数字存储示波器(草稿)
  • 原文地址:https://www.cnblogs.com/androidsihai/p/6033435.html
Copyright © 2020-2023  润新知