<强> Android自定义照相机实现强>
近期小巫在学校有一个创新项目,也不是最近,是一个拖了很久的项目,之前一直没有去搞,最近因为要中期检查,搞得我跟小组成员一阵忙活,其实开发一款照相机软件并不太难、下面就是通过自定义的方式来实现手机照相的功能。
创建一个项目:FingerTakePicture
首先来搞一下界面:
& lt; FrameLayout xmlns: android=" http://schemas.android.com/apk/res/android " xmlns:工具=" http://schemas.android.com/tools " android: id=癅 + id/FrameLayout1” android: layout_width=" match_parent " android: layout_height=癿atch_parent”比; & lt; !——显示预览图形——比; & lt; SurfaceView android: id=癅 + id/surfaceView” android: layout_width=" match_parent " android: layout_height=" match_parent "/比; & lt; !——相对布的局,放置两个按钮——比; & lt;使用 android: id=癅 + id/buttonLayout” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android:可见性="了" 比; & lt; !——拍照按钮——比; & lt;按钮 android: id=癅 + id/takepicture” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android: layout_alignParentRight=" true " android: layout_alignParentBottom=" true " android:背景=" @drawable/btn_tabkepicture_selector” android: onClick=" btnOnclick "/比; & lt; ImageView android: id=癅 + id/scalePic” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android: layout_alignParentLeft=" true " android: layout_alignParentBottom=" true " android: layout_marginLeft=" 5 dp " android:背景=" @drawable/img_showpic_selector” android: onClick=" imageClick "/比; & lt;/RelativeLayout> & lt;/FrameLayout> >之前界面效果(无法把预览给截屏下来滴):
权限设置少不了:
& lt;清单xmlns: android=" http://schemas.android.com/apk/res/android " 包=" com.wwj.finger " android: versionCode=" 1 " android: versionName=" 1.0 "比; & lt; uses-sdk android: minSdkVersion=" 4 " android: targetSdkVersion=" 15 "/比; & lt; uses-permission android: name=" android.permission。相机”/比; & lt; !——在SDCard中创建与删除文件权限——比; & lt; uses-permission android: name=" android.permission。MOUNT_UNMOUNT_FILESYSTEMS”/比; & lt; !——往SDCard写入数据权限——比; & lt; uses-permission android: name=" android.permission。WRITE_EXTERNAL_STORAGE”/比; & lt;应用程序 android:图标=" @drawable/ic_launcher” android: label=" @string/app_name” android:主题=癅style/AppTheme”比; & lt;活动 android: name=" .MainActivity " android: label=" @string/title_activity_main” 比; & lt; intent-filter> & lt;行动android: name=" android.intent.action.MAIN "/比; & lt;类别android: name=" android.intent.category.LAUNCHER "/比; & lt;/intent-filter> & lt;/activity> & lt;活动 android: name=" .ShowPicActivity " android: label=" @string/app_name” android:主题=" @style/AppTheme” 面向android: configChanges=" | keyboardHidden” 祝辞& lt;/activity> & lt;/application> & lt;/manifest> >之前<强>主活动:强>
包com.wwj.finger; 进口java.io.File; 进口java.io.FileOutputStream; 进口java.io.IOException; 进口java.text.SimpleDateFormat; 进口java.util.Date; 进口android.app.Activity; 进口android.content.Intent; 进口android.graphics.PixelFormat; 进口android.hardware.Camera; 进口android.hardware.Camera.PictureCallback; 进口android.os.Bundle; 进口android.os.Environment; 进口android.view.KeyEvent; 进口android.view.MotionEvent; 进口android.view.Surface; 进口android.view.SurfaceHolder; 进口android.view.SurfaceHolder.Callback; 进口android.view.SurfaceView; 进口android.view.View; 进口android.view.ViewGroup; 进口android.widget.Toast;/* * *安卓手指拍照 * * @author wwj * @date 2013/4/29 */公开课MainActivity延伸活动{ 私人视图布局; 私人相机相机; 私人相机。参数参数=零; 捆包=零;//声明一个包对象,用来存储数据 @Override 公共空间> 包com.wwj.finger; 进口android.app.Activity; 进口android.content.Intent; 进口android.graphics.Bitmap; 进口android.graphics.BitmapFactory; 进口android.graphics.Matrix; 进口android.os.Bundle; 进口android.widget.ImageView; 公开课ShowPicActivity延伸活动{ 私人ImageView ivPic=零;//显示图片控件/* * *活动在创建的时候回调的函数主要用来初始化一些变量 */@Override 保护无效onCreate(包savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.showpic); ivPic=(ImageView) findViewById (R.id.ivPic); setImageBitmap (getImageFormBundle ()); }/* * *将MainActivity传过来的图片显示在界面当中 * * @param字节 */公共空间setImageBitmap (byte[]字节){ 位图cameraBitmap=byte2Bitmap ();//根据拍摄的方向旋转图像(纵向拍摄时要需要将图像选择90度) 矩阵矩阵=new矩阵(); matrix.setRotate (MainActivity.getPreviewDegree ()); cameraBitmap=位图 .createBitmap (cameraBitmap 0 0, cameraBitmap.getWidth (), cameraBitmap.getHeight(),矩阵,真实); ivPic.setImageBitmap (cameraBitmap); }/* * *从包对象中获取数据 * * @return */公共byte [] getImageFormBundle () { 目的意图=getIntent (); 包数据=https://www.yisu.com/zixun/intent.getExtras ();=data.getByteArray byte[]字节(字节); 返回字节; }/* * *将字节数组的图形数据转换为位图 * * @return */私人位图byte2Bitmap () { null null null null null null null null null null nullAndroid自定义照相机的实例