实现的功能是,第三方调用系统相册,可以选择进入此自定界面。可以预览图片。并且返回图片存储路径
(第三方可以根据filePath获得图片并展示)
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<SurfaceView
android:id="@+id/sv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</RelativeLayout>
<Button
android:layout_width="fill_parent"
android:layout_height="50dp"
android:text="拍照"
android:layout_gravity="bottom"
android:onClick="capture"
android:textSize="12sp"/>
</FrameLayout>
Activity控制模块
package com.wang.demo_android.activity;
import com.wang.demo_android.R;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ImageFormat;
import android.graphics.Matrix;
import android.graphics.Bitmap.CompressFormat;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@SuppressWarnings("deprecation")
public class CustomCameraActivity extends Activity implements Callback {
private SurfaceView sv;
private SurfaceHolder mHolder;
private Camera mCamera;
private Activity mContext;
private Camera.PictureCallback mPicCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File file = new File(Environment.getExternalStorageDirectory(),
System.currentTimeMillis() + ".jpg");
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
Matrix matrix = new Matrix();
matrix.setRotate(90);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(),
matrix, true);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file.getAbsolutePath());
bitmap.compress(CompressFormat.JPEG, 100, fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (Exception e) {
// TODO: handle exception
}
}
Intent intent = mContext.getIntent();
intent.putExtra("data", "" + file.getAbsolutePath());
setResult(RESULT_OK, intent);
mContext.finish();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.customcamera);
mContext = this;
sv = (SurfaceView) findViewById(R.id.sv);
mHolder = sv.getHolder();
mHolder.addCallback(this);
}
@Override
protected void onResume() {
super.onResume();
if (mCamera == null) {
mCamera = getCamera();
if (mHolder != null) {
setStartPreview(mCamera, mHolder);
}
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
releaseCamera();
}
public void capture(View view) {
// 设置参数
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);
parameters.setPictureSize(800, 400);
parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO);
mCamera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
// 对焦成功,拍摄图片
if (success) {
mCamera.takePicture(null, null, mPicCallback);
}
}
});
}
/**
* 获取Camera对象
*
* @return
*/
private Camera getCamera() {
Camera camera;
try {
camera = Camera.open();
} catch (Exception e) {
camera = null;
e.printStackTrace();
}
return camera;
}
/**
* 实现预览效果
*/
private void setStartPreview(Camera camera, SurfaceHolder mHolder) {
try {
camera.setPreviewDisplay(mHolder);
camera.setDisplayOrientation(90);
camera.startPreview();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 释放资源
*/
private void releaseCamera() {
if (mCamera != null) {
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
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();
}
}
AndroidMinifest.xml清单文件:
<activity
android:name="com.wang.demo_android.activity.CustomCameraActivity"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.media.action.IMAGE_CAPTURE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>