安卓自定义相机,使用系统相机教程源码都有

使用系统相机 Android中使用系统相机是很方便的,单这仅仅是简单的使用而已,并不能获得什么特殊的效果。

要想让应用有相机的action,咱们就必须在清单文件中做一些声明,好让系统知道,如下


1234512345 action的作用就是声明action的类型,便于Intent的使用,category的作用就是注册,没有它。相关操作将不起作用。 
一种方式是简单粗暴的实现,如下

Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQ_1);
//然后在 onActivityResult方法中实现数据的获取,此处是展示在了一个ImageView上
if(resultCode==RESULT_OK){
if(requestCode==REQ_1){
Bundle bundle=data.getExtras();
Bitmap bitmap=(Bitmap) bundle.get("data");
imageView.setImageBitmap(bitmap);
}123456789123456789 小总结:这样的好处是简单快捷,但是在现在的android智能机中,好多相片都是很大的,这里获得的仅仅是一个缩略图罢了

另外一种方式是稍微温婉一点了,而且效果也更好一点,好处就在于它是先将照片信息存储到本地一个临时文件中,然后让ImageView去相关路径下进行读取,这样就可以获得清晰度很高的图片了。如下

/*
* 此方法的存在意义就是不在onActivityResult方法的data中获取我们拍照的缩略图,而是从我们的文件输出目录下直接查看原图
* 这样的好处就是可以对大容量的照片进行便捷的准确的操作
*/
public void onStartCarema2(View view){
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//见你给你路径传递回需要的处理方法中
Uri uri=Uri.fromFile(new File(myFilePath));
//设置文件的输出路径
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQ_2);
}
//然后在onActivityResult方法中进行相关的处理就可以了
else if(requestCode==REQ_2){
FileInputStream fis=null;
try {
fis=new FileInputStream(myFilePath);
Bitmap bitmap=BitmapFactory.decodeStream(fis);
imageView.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//记得最后一定要关闭相关的流操作。否则会引起相关的异常的。123456789101112131415161718192021222324252627282930313233123456789101112131415161718192021222324252627282930313233
开发自定义的相机 由于开发自定义的相机要进行相关的权限的生命,所以一定不要忘记在清单文件中做相关的处理,如下


1212 然后有以下几个步骤:

创建Camera,并完成初始化Camera,开始预览,释放资源三个方法与Activity的SurfaceView进行绑定。在系统的onPause(),onResume()方法中进行相关状态设置对Camera进行参数设置,作用就是对照片类型和状态进行相关的设置将拍得的照片进行展示,一般会新开一个Activity,用ImageView进行承载,我们还可以在此Activity上添加TextView,实现水印效果等其他的美化操作另外,如果想加入自动聚焦的功能,就可以在SurfaceView上添加onClickListener(),对屏幕进行侦听,调用myCamera.autoFocus(null);方法即可 以上就是整个思路

接下来就是使用系统Camera的代码展示

(可以直接copy相关代码块,添加到你的应用中去,实现Camera这一功能。)

首先是MainActivity

布局
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" >