第一步:自定义相机框架
package com.example.imooc.mycamera;
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import java.io.IOException;
public class CustomCamera extends Activity implements SurfaceHolder.Callback{
private Camera mCamera;
private SurfaceView mPreview;
private SurfaceHolder mHolder;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom);
mPreview= (SurfaceView) findViewById(R.id.sv);
mHolder=mPreview.getHolder();
mHolder.addCallback(this);
}
public void capture(View view){
}
@Override
protected void onResume() {
super.onResume();
if(mCamera ==null){
mCamera=getCamera();
if(mHolder != null){
setStartPreview(mCamera,mHolder);
}
}
}
@Override
protected void onPause() {
super.onPause();
releaseCamera();
}
//获取camera对象
private Camera getCamera(){
Camera camera;
try {
camera = Camera.open();
}catch (Exception e){
camera=null;
e.printStackTrace();
}
return camera;
}
//开始预览相机的内容
private void setStartPreview(Camera camera,SurfaceHolder holder){
try {
camera.setPreviewDisplay(holder);
//将系统camera预览角度进行调整
camera.setDisplayOrientation(90);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
//释放相机资源
private void releaseCamera(){
if(mCamera != null){
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera=null;
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
setStartPreview(mCamera,mHolder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mCamera.stopPreview();
setStartPreview(mCamera,mHolder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
releaseCamera();
}
}
第二步:设置相片参数与回调函数
public void capture(View view){
Camera.Parameters parameters=mCamera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);
parameters.setPictureSize(800,400);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
mCamera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if(success){
mCamera.takePicture(null,null,mPictureCallback);
}
}
});
}
private Camera.PictureCallback mPictureCallback=new Camera.PictureCallback(){
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File tempFile=new File("/sdacrd/temp.png");
try {
FileOutputStream fos=new FileOutputStream(tempFile);
fos.write(data);
fos.close();
Intent intent=new Intent(CustomCamera.this,ResultAty.class);
intent.putExtra("picPath",tempFile.getAbsolutePath());
startActivity(intent);
CustomCamera.this.finish();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
第三步:创建显示照片的activity
package com.example.imooc.mycamera;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.Path;
import android.os.Bundle;
import android.widget.ImageView;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class ResultAty extends Activity{
private ImageView mimageview;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
String Path=getIntent().getStringExtra("picPath");
mimageview= (ImageView) findViewById(R.id.pic);
try{
FileInputStream fis=new FileInputStream(Path);
Bitmap bitmap=BitmapFactory.decodeStream(fis);
Matrix matrix=new Matrix();
matrix.setRotate(90);
bitmap=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
mimageview.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//
Bitmap bitmap=new BitmapFactory().decodeFile(Path);
//
mimageview.setImageBitmap(bitmap);
}
}
还可以
添加水印功能哦 。。。。。。