基本信息
源码名称:android实现拍照保存预览相册取消退出
源码大小:1.64M
文件格式:.rar
开发语言:Java
更新时间:2014-08-26
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
拍照 预览相册 取消 等常用功能
拍照 预览相册 取消 等常用功能
package demo.camero.one; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.hardware.Camera; import demo.camero.R; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.PixelFormat; import android.hardware.Camera.AutoFocusCallback; import android.hardware.Camera.PictureCallback; import android.hardware.Camera.ShutterCallback; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /* 拍照 * @author Administrator */ public class TakePhotoAct extends Activity implements SurfaceHolder.Callback{ private static String imgPath = Environment.getExternalStorageDirectory().getPath() "/mtu"; private final static String TAG = "TakePhotoAct"; private File picture; private String fileName; private SurfaceView surfaceView; //相机画布 private SurfaceHolder surfaceHolder; private Button takePicView,exitView,canclePicView,savePicView,lookPicView; private byte[] data1; private Camera mCamera; //照相机 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //这里我在AndroidManifest.xml的activity中添加了android:theme="@android:style/Theme.NoTitleBar.Fullscreen" /** * 隐藏状态栏和标题栏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); */ //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //横屏 /** * 获取Button并且设置事件监听 */ takePicView = (Button)this.findViewById(R.id.takepic); takePicView.setOnClickListener(TakePicListener); canclePicView=(Button)this.findViewById(R.id.canclepic); canclePicView.setOnClickListener(CanClePicListener); savePicView=(Button)this.findViewById(R.id.savepic); savePicView.setOnClickListener(SavePicListener); lookPicView=(Button)this.findViewById(R.id.lookpic); lookPicView.setOnClickListener(lookPicListener); exitView = (Button)this.findViewById(R.id.exit); exitView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); surfaceView = (SurfaceView)this.findViewById(R.id.surface_camera); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); checkSoftStage(); //首先检测SD卡是否存在 } /** * 检测手机是否存在SD卡,网络连接是否打开 */ private void checkSoftStage(){ if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ //判断是否存在SD卡 //String rootPath = Environment.getExternalStorageDirectory().getPath(); //获取SD卡的根目录 File file = new File(imgPath); if(!file.exists()){ file.mkdir(); } }else{ new AlertDialog.Builder(this).setMessage("检测到手机没有存储卡!请插入手机存储卡再开启本应用。") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }).show(); } } /** * 点击拍照按钮,启动拍照 */ private final OnClickListener TakePicListener = new OnClickListener(){ @Override public void onClick(View v) { mCamera.autoFocus(new AutoFoucus()); //自动对焦 } }; /** * 点击取消按钮 */ private final OnClickListener CanClePicListener = new OnClickListener(){ @Override public void onClick(View v) { mCamera.startPreview(); } }; /** * 点击保存 */ private final OnClickListener SavePicListener = new OnClickListener(){ @Override public void onClick(View v) { if(fileName!=null) { File file = new File(imgPath,fileName); Bitmap bm = BitmapFactory.decodeByteArray(data1, 0, data1.length); try { BufferedOutputStream bos; bos = new BufferedOutputStream(new FileOutputStream(file)); bm.compress(Bitmap.CompressFormat.JPEG, 60, bos); bos.flush(); bos.close(); Toast.makeText(TakePhotoAct.this, "保存成功", Toast.LENGTH_LONG).show(); mCamera.startPreview(); fileName=null; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else { Toast.makeText(TakePhotoAct.this, "请先拍照", Toast.LENGTH_LONG).show(); } } }; /** * 点击预览相册按钮 */ private final OnClickListener lookPicListener = new OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(TakePhotoAct.this, PictureScanAct.class); startActivity(intent); } }; /** * 自动对焦后拍照 * @author aokunsang * @Date 2011-12-5 */ private final class AutoFoucus implements AutoFocusCallback{ @Override public void onAutoFocus(boolean success, android.hardware.Camera camera) { if(success && mCamera!=null){ mCamera.takePicture(mShutterCallback, null, mPictureCallback); } } } /** * 重点对象、 此处实例化了一个本界面的PictureCallback * 当用户拍完一张照片的时候触发,这时候对图片处理并保存操作。 * */ private final PictureCallback mPictureCallback = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { try { fileName = System.currentTimeMillis() ".jpg"; picture = new File(Environment.getExternalStorageDirectory() "/" fileName); try { FileOutputStream fos = new FileOutputStream(picture.getPath()); // Get file output stream fos.write(data); // Written to the file fos.close(); data1=data; } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } }; /** * 在相机快门关闭时候的回调接口,通过这个接口来通知用户快门关闭的事件, * 普通相机在快门关闭的时候都会发出响声,根据需要可以在该回调接口中定义各种动作, 例如:使设备震动 */ private final ShutterCallback mShutterCallback = new ShutterCallback() { public void onShutter() { Log.d("ShutterCallback", "...onShutter..."); } }; @Override /** * 初始化相机参数,比如相机的参数: 像素, 大小,格式 */ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Camera.Parameters param = mCamera.getParameters(); /** * 设置拍照图片格式 */ param.setPictureFormat(PixelFormat.JPEG); /** * 设置预览尺寸【这里需要注意:预览尺寸有些数字正确,有些会报错,不清楚为啥】 */ param.setPreviewSize(320, 240); /** * 设置图片大小 */ //param.setPictureSize(Const.width, Const.height); mCamera.setParameters(param); /** * 开始预览 */ mCamera.startPreview(); } @Override /** * 打开相机,设置预览 */ public void surfaceCreated(SurfaceHolder holder) { try { mCamera = Camera.open(); //打开摄像头 mCamera.setPreviewDisplay(holder); } catch (IOException e) { mCamera.release(); mCamera = null; } } @Override /** * 预览界面被关闭时,或者停止相机拍摄;释放相机资源 */ public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); if(mCamera!=null) mCamera.release(); mCamera = null; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_CAMERA){ //按下相机实体按键,启动本程序照相功能 mCamera.autoFocus(new AutoFoucus()); //自动对焦 return true; }else{ return false; } } }