Android开发_Camera应用
1、通过调用系统的照相机实现照相功能
1)将拍照的图片存到本地文件,然后再读取显示
public class MainActivity extends Activity {private Button btn;private ImageView iv;private File file = null;private static final int REQUEST_CODE = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = (Button) findViewById(R.id.btn);iv = (ImageView) findViewById(R.id.iv);// 设置按钮单击事件btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 在sdcard卡中创建一个文件夹,要获取相应的权限File dir = new File(Environment.getExternalStorageDirectory(),"pictures");if (!dir.exists()) {dir.mkdir();}file = new File(dir, System.currentTimeMillis() + ".jpg");if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}// 调用系统的照相机Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));startActivityForResult(i, REQUEST_CODE);}});}// 获取Activity返回结果的方法@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case REQUEST_CODE:iv.setImageURI(Uri.fromFile(file));break;default:break;}super.onActivityResult(requestCode, resultCode, data);}
}
2)直接读取拍照的数据,并且显示
public class Main extends Activity implements OnClickListener
{private ImageView imageView;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button btnTakePicture = (Button)findViewById(R.id.btnTakePicture);btnTakePicture.setOnClickListener(this);imageView = (ImageView)findViewById(R.id.imageview);}protected void onActivityResult(int requestCode, int resultCode, Intent data){if(requestCode == 1){if(resultCode == Activity.RESULT_OK){Bitmap cameraBitmap = (Bitmap)data.getExtras().get("data");imageView.setImageBitmap(cameraBitmap);}}}public void onClick(View view){Intent intent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, 1);}}
相应的布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ImageViewandroid:id="@+id/iv"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="开始拍照" /></LinearLayout>
2、通过调用Camera类实现照相功能
要使用照相机,需要获取相应的权限<uses-permission android:name="android.permission.CAMERA" />
public class MainActivity extends Activity {private SurfaceView sv;private Camera camera;// 照相机对象private Button btn;// 照相按钮private Callback callback = new Callback() {@Overridepublic void surfaceDestroyed(SurfaceHolder arg0) {stopPreview();}@Overridepublic void surfaceCreated(SurfaceHolder arg0) {startPreview();}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,int arg3) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sv = (SurfaceView) findViewById(R.id.sv);sv.getHolder().addCallback(callback);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// 照相机拍照camera.takePicture(null, null, new Camera.PictureCallback() {// 拍完照片后的回调方法@Overridepublic void onPictureTaken(byte[] data, Camera camera) {String path = null;if ((path = saveFile(data)) != null) {Intent i = new Intent(MainActivity.this,ImagePreviewActivity.class);i.putExtra("path", path);startActivity(i);} else {// 保存文件失败Toast.makeText(MainActivity.this, "保存照片失败!",Toast.LENGTH_SHORT).show();}}});}});}// 开始预览private void startPreview() {// 打开照相机camera = Camera.open();try {camera.setPreviewDisplay(sv.getHolder());camera.setDisplayOrientation(90);camera.startPreview();} catch (IOException e) {e.printStackTrace();}}// 结束预览private void stopPreview() {camera.stopPreview();camera.release();}// 保存照片的方法private String saveFile(byte[] bytes) {try {// createTempFile()在android 4.x版本后默认的存储路径为:/data/data/应用包名/cache// 而之前的版本该方法会把文件存储在sd上File f = File.createTempFile("img", "");FileOutputStream fos = new FileOutputStream(f);fos.write(bytes);fos.flush();fos.close();return f.getAbsolutePath();} catch (IOException e) {e.printStackTrace();}return null;}
}
public class ImagePreviewActivity extends Activity {private ImageView iv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);iv = new ImageView(this);setContentView(iv);// 获取图片的路径String path = getIntent().getStringExtra("path");if (path != null) {// 显示图片iv.setImageURI(Uri.fromFile(new File(path)));}}}
相应的布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><SurfaceViewandroid:id="@+id/sv"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1" /><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="拍照" /></LinearLayout>
Android开发_Camera应用相关推荐
- Android环境搭建和Android HelloWorld—Android开发环境搭建
Android_Android开发环境搭建-搭建Android的开发环境 1.我考虑先下载JDK7.0,在JDK的安装中,考虑一般SDK都是向上兼容的,于是选择了最高的版本7.0 这里是我总结的详细的 ...
- java安卓开发工具_推荐几个非常实用的Android开发工具
工欲善其事,必先利其器.我们进行Android开发也要有好的开发工具辅助才能更好更高效的完成各种开发,为用户提供更实用的应用程序.本文就为大家推荐几个非常实用的Android开发工具,及几个常用的编辑 ...
- android 网络编程实现,Android开发使用HttpURLConnection进行网络编程详解【附源码下载】...
本文实例讲述了Android开发使用HttpURLConnection进行网络编程.分享给大家供大家参考,具体如下: --HttpURLConnection URLConnection已经可以非常方便 ...
- linux 浏览器源码下载,Android开发:图片浏览器源码
Android 图片浏览器源码,是你学习Android很好的例子,希望对你的学习有帮助. main.xml android:layout_width="fill_parent" a ...
- 2017-2018-2 20165236 实验四《Android开发基础》实验报告
2017-2018-2 20165236 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:郭金涛 ...
- Android开发权威指南(第2版)新书发布
<Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...
- indows上的android开发环境软件架构5
(二)实验要求: ? 修改按下button 显示的内容中添加上自己的学号姓名: ? 添加一个按钮,按钮名称为"退出",并且为这个按钮添加事件代码,使得点击这个按钮后退 出程序.事件 ...
- 折叠屏就要来了,适配逼死 Android 开发?
1. 异型屏还没适配好,折叠屏就要来了,Android 的碎片化,让开发者又多掉了不少头发. 北京时间 11 月 8 日,三星在旧金山向开发者发布了一款可折叠屏幕手机.并表示,新技术需要开发者调整其 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析...
1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...
最新文章
- iOS11、iPhone X、Xcode9 适配指南
- OpenCV识别形状
- JSP中内置对象pageContent的使用
- HTML框架标签的使用-lt;framesetgt;
- java 解析数据包_一种基于Java语言的网络通讯数据包解析方法与流程
- 使用xml文件存储数据使用xpath查询
- es5中数组方法unshift、splice、reduce使用
- 聊聊我在美团做算法的感受
- Silverlight 2.0学习笔记——RIAs的缺点
- 《赖氏经典英语语法》第三集
- Myshare.cc 图床对接ShareX自定义图片上传
- 安全狗入选信通院“业务安全推进计划”名单
- icloud android,如何将照片从 iCloud 转移到 Android
- 代码签名是如何工作的,为什么需要代码签名?
- Weblogic 弱密码+部署war包getshell
- 进阶篇——数据库的索引
- 51nod 1298 圆与三角形
- python爬虫技术源码_实战|手把手教你用Python爬虫(附详细源码)
- tlc5620输出三角波流程图_基于TLC5620 DAC波形发生器的设计——锯齿波、三角波
- 10个全球最佳免费土地覆被/土地利用数据资源
热门文章
- 为什么Edge一打开就跳转2345网页首页?
- 手机桌面百度搜索框不显示热词_高效搜索神器,你选listary还是火柴?
- 阿里巴巴Java开发手册(正式版)
- 视频教程-Python数据分析与挖掘-Python
- 河北正定县2010年政府工作报告(1)
- 地理信息系统(ArcGIS)在水文水资源、水环境中的实践技术应用及案例分析
- Prometheus V2仿真开发套件全新上市,实现一键启动仿真
- 搭档之家:华为手机“秒售罄”炒上6万! 小米等多家折叠屏布局明年
- HTML表格鼠标滑过变色 和奇数偶数行变色+点击变色
- 金属切削有普通铣床(加工中心)或车床