SurfaceView取景
2016-04-19 11:49
429 查看
xml中的布局文件
//主类中的实现代码
<RelativeLayout 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" tools:context="com.example.surfaceview.MainActivity" > <SurfaceView android:id="@+id/sfv" android:layout_width="300dip" android:layout_height="300dip" /> </RelativeLayout>
//主类中的实现代码
import java.io.IOException; import android.support.v7.app.ActionBarActivity; import android.graphics.PixelFormat; import android.hardware.Camera; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import android.view.WindowManager; @SuppressWarnings("deprecation") public class MainActivity extends ActionBarActivity { //定义控件 private SurfaceView sfv; private Camera camera;//摄像头 private boolean preview = false ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在加载布局之前调用 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); //获得控件的id sfv=(SurfaceView) findViewById(R.id.sfv); //获得控制器 SurfaceHolder holder = sfv.getHolder(); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //设置分辨率 holder.setFixedSize(400, 400); holder.setKeepScreenOn(true); //实现回调的接口 holder.addCallback(new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { //销毁的时候相机不等于空 if(camera != null) { /* 若摄像头正在工作,先停止它 */ if(preview) { camera.stopPreview(); //停止展示view视图 preview = false; } //如果注册了此回调,在release之前调用,否则release之后还回调,crash camera.setPreviewCallback(null); camera.release(); camera=null; } } @SuppressWarnings("deprecation") @Override public void surfaceCreated(SurfaceHolder holder) { camera=Camera.open(); camera.setDisplayOrientation(90); try { //设置预览显示 camera.setPreviewDisplay(holder); Camera.Parameters parameters=camera.getParameters(); /* 设置预览照片的大小 */ parameters.setPictureSize(100, 100); /* 每秒从摄像头捕获5帧画面, */ //预览的频率 parameters.setPreviewFrameRate(5); /* 设置照片的输出格式:jpg */ parameters.setPictureFormat(PixelFormat.JPEG); /* 照片质量 */ parameters.set("jpeg-quality", 400); //设置照片的额质量 parameters.setJpegQuality(80); /*设置图片的大小*/ parameters.setPictureSize(1024, 768); //开启预览 camera.setParameters(parameters); camera.startPreview(); preview=true; } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }); } }
相关文章推荐
- 给定一组数,要求从中找出第k小的元素
- Flask 多文件基本结构
- 使用Asp.Net MVC开发兼职文章系统
- Altium Designer
- Java中<T>泛型意思
- iOS开发——界面跳转方法总结
- 使用cxf编写webservice遇到问题
- 移动屏幕旋转解决方法
- 调试web service的问题:“无法自动进入并单步执行服务器。无法确定停止位置。请验证是否已加载符号。未找到符号:……”
- 汇编基本模版
- 基于 Facebook Redex 实现 Android APK 的压缩和优化
- Angularjs练手篇——Server编写
- Linux 更改目录及子目录权限
- 禅与 Objective-C 编程艺术
- @PathVariable
- 前后端数据对接防止接口被恶意调用
- 8-06. 畅通project之局部最小花费问题(35)(最小生成树_Prim)(ZJU_PAT)
- FileUtil.java
- View6.2安全服务器测试环境注意事项
- [django]入门教程3:模板语法及使用