博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实例教程十三:拍照
阅读量:6720 次
发布时间:2019-06-25

本文共 5789 字,大约阅读时间需要 19 分钟。

 

不错的帖子:

仿UCWEB界面源码!

Android MP3经典案例

根据奇异高清UI界面源码 添加了一些功能

Android 3D立体图片旋转

------------帖子正文-----------------

原文链接:

拍照界面--main.xml

拍照代码:MainActivity.java

package cn.itcast.picture; import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException; import android.app.Activity;import android.hardware.Camera;import android.hardware.Camera.PictureCallback;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;import android.widget.RelativeLayout; public class MainActivity extends Activity {        private RelativeLayout btnLayout;        private SurfaceView sfvShow;        private Camera camera;         @Override        public void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                 requestWindowFeature(Window.FEATURE_NO_TITLE); //设置窗口无标题                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                                 WindowManager.LayoutParams.FLAG_FULLSCREEN); //设置全屏                setContentView(R.layout.main);                 initView();          }            private void initView() {                btnLayout = (RelativeLayout)this.findViewById(R.id.btnLayout);                //得到SurfaceView显示控件 ,只有得到它,才能捕获摄像头画面                sfvShow = (SurfaceView)this.findViewById(R.id.sfvShow);                 sfvShow.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);                sfvShow.getHolder().setFixedSize(176, 144);                sfvShow.getHolder().setKeepScreenOn(true); //使摄像头一直保持高亮                sfvShow.getHolder().addCallback(new SurfaceCallback());        }         private final class SurfaceCallback implements Callback{                 @Override                public void surfaceChanged(SurfaceHolder holder, int format, int width,                                int height) {                        // TODO Auto-generated method stub                 }                 @Override                public void surfaceCreated(SurfaceHolder holder) {                        try{                                //打开摄像头                                camera = Camera.open();                                Camera.Parameters parameters = camera.getParameters();                                parameters.setPreviewSize(640, 480);                                parameters.setPreviewFrameRate(5);                                parameters.setPictureSize(640, 480);                                parameters.setJpegQuality(80);                                camera.setParameters(parameters);                                camera.setPreviewDisplay(holder);                                                                  //Log.i("摄像头参数", parameters.flatten());                        }catch(Exception e){                                e.printStackTrace();                        }                 }                 @Override                public void surfaceDestroyed(SurfaceHolder holder) {                        //一定要关闭摄像头,因为摄像头只能被一个使用                        if(camera != null){                                camera.release();                                camera = null;                        }                 }         }         //拍照        public void takepicture(View v){                if(camera != null){                        switch (v.getId()) {                        case R.id.btnTakePicture:                                camera.takePicture(null, null, new MyPictureCallBack());                                break;                        case R.id.btnAutoFocus:                                //不想得到对焦后的事件,传NULL                                camera.autoFocus(null);                                break;                        default:                                break;                        }                }        }         //经过压缩处理后的图片数据        private final class MyPictureCallBack implements PictureCallback{                @Override                public void onPictureTaken(byte[] data, Camera camera) {                        try{                                File jpgFile = new File(Environment.getExternalStorageDirectory(),                                                System.currentTimeMillis() + ".jpg");                                //输出 流                                FileOutputStream outStream = new FileOutputStream(jpgFile);                                outStream.write(data);                                outStream.close();                                //代表摄像头处理完照片了                                camera.startPreview(); //开始预览                        }catch (FileNotFoundException e) {                                e.printStackTrace();                        }catch(IOException e){                                e.printStackTrace();                        }                }                        }         @Override        public boolean onTouchEvent(MotionEvent event) {                if(event.getAction() == MotionEvent.ACTION_DOWN){                        btnLayout.setVisibility(ViewGroup.VISIBLE);                        return true; //返回true,销毁该事件,不要再往后传递了                }                return super.onTouchEvent(event);        }}

清单文件:

源码下载:

转载地址:http://urcmo.baihongyu.com/

你可能感兴趣的文章
Hyper-V 2016 系列教程50 某德国制造型企业上线案例分享
查看>>
一个yum简单故障的处理
查看>>
IPMI总结
查看>>
我的友情链接
查看>>
CentOS-6.5安装配置SVN
查看>>
中文分词算法 之 词典机制性能优化与测试
查看>>
MySQL show processlist说明
查看>>
Python内建函数getattr备注
查看>>
Lammp的搭建
查看>>
贪心算法-活动选择
查看>>
Material Design Lite ,简洁惊艳的前端工具箱。
查看>>
20.22 告警系统监控项目
查看>>
Python网络编程之协程
查看>>
定制更友好的iptables防火墙
查看>>
用sql语句对access数据库进行多条件查询
查看>>
php操作ini配置文件
查看>>
dataguard主备延迟多长时间的查询方法
查看>>
[Array]628. Maximum Product of Three Numbers
查看>>
C++函数模板&类模板
查看>>
spring事件广播
查看>>