android自定义相机加取景框
这是预览效果
1、首先,xml布局,两个控件。SurfaceView和MyView
<SurfaceView android:id="@+id/surfaceView" android:layout_width="match_parent" android:layout_height="match_parent" /> <com.example.administrator.myapplication.MyView android:id="@+id/myView" android:layout_width="match_parent" android:layout_height="match_parent"/>
SurfaceView是相机预览控件,系统相机默认是横屏的,所以,要么我们把相机旋转90度,要么我们把屏幕设置成横屏
camera.setDisplayOrientation(90);//相机旋转90度
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//把屏幕设置成横屏
2、创建MyActivity。
@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//把屏幕设置成横屏 setContentView(R.layout.testlayout); myView = (MyView) findViewById(R.id.myView); surfaceview = (SurfaceView) findViewById(R.id.surfaceView); surfaceview.setOnTouchListener(new View.OnTouchListener() {//点击 surfaceview 聚焦 @Override public boolean onTouch(View v, MotionEvent event) {camera.autoFocus(myAutoFocusCallback); return false; }});
private MyView myView; private Camera camera; private SurfaceView surfaceview; private Camera.AutoFocusCallback myAutoFocusCallback = new Camera.AutoFocusCallback() {@Override public void onAutoFocus(boolean success, Camera camera) {
SurfaceHolder holder = surfaceview.getHolder(); holder.setKeepScreenOn(true);// 屏幕常亮 holder.addCallback(new MySurfaceCallback()); holder.lockCanvas();}
private final class MySurfaceCallback implements SurfaceHolder.Callback {@Override public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
//当surface的格式或大小发生改变,这个方法就被调用
} @Override public void surfaceCreated(SurfaceHolder holder) { try { // surfaceview创建之后,就去打开相机 camera = Camera.open(); Camera.Parameters params = camera.getParameters(); camera.setPreviewDisplay(surfaceview.getHolder()); camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { if (camera != null) { camera.release(); camera = null; } }}
//聚焦后的操作
}};
3、还有一个方法,点击拍摄的时候调用
camera.takePicture(null, null, myPictureCallback);
private Camera.PictureCallback myPictureCallback = new Camera.PictureCallback(){@Override public void onPictureTaken(byte[] data, Camera camera) {//保存图片 } };
4、最后是MyView
public class MyView extends ImageView {//获取屏幕的宽和高。根据屏幕的宽和高来算取景框的位置 private int width, height; public MyView(Context context, AttributeSet attrs) {super(context, attrs); WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); width = wm.getDefaultDisplay().getWidth(); height = wm.getDefaultDisplay().getHeight(); }@Override public void onDraw(Canvas canvas) {Paint paint = new Paint(); paint.setColor(Color.RED); paint.setAlpha(250); // 下面是取景框的8条线 // xy的算法是:把屏幕横着(逆时针旋转90度的屏幕),从左到右是x轴,从上到下是y轴 canvas.drawLine(200, 150, 300, 150, paint); canvas.drawLine(200, 150, 200, 200, paint); canvas.drawLine(200, height-150, 300, height-150, paint); canvas.drawLine(200, height-150, 200, height-200, paint); canvas.drawLine(width-355, 150, width-455, 150, paint); canvas.drawLine(width-355, 150, width-355, 200, paint); canvas.drawLine(width-355, height-150, width-455, height-150, paint); canvas.drawLine(width-355, height-150, width-355, height-200, paint); super.onDraw(canvas); } }
android自定义相机加取景框相关推荐
- android自定义相机添加蒙板,拍照剪切
前几天,我写了一篇自定义相机加取景框的文章,这几天,我又研究了一下,进一步写了蒙板,并且拍照出来剪切只留取景框的照片. 加上对之前代码的调整.现在又记录下来 现在的效果是这样的 布局文件 <?x ...
- android 自定义相机源码,Android 自定义相机及分析源码
Android 自定义相机及分析源码 使用Android 系统相机的方法: 要想让应用有相机的action,咱们就必须在清单文件中做一些声明,好让系统知道,如下 action的作用就是声明action ...
- Android自定义相机拍照、图片裁剪的实现
原文:Android自定义相机拍照.图片裁剪的实现 最近项目里面又要加一个拍照搜题的功能,也就是用户对着不会做的题目拍一张照片,将照片的文字使用ocr识别出来,再调用题库搜索接口搜索出来展示给用户,类 ...
- 如何为自定义相机添加 取景框|扫描框 |预览框|矩形框
自定义 相机 及取景框 绘制 在相机预览组件上覆盖一层 自定义ImageView 重写 IamgeView的 ondraw() 方法. 2.要实现第一步 首先要的到矩形框 左上角的 坐标(全屏下是ma ...
- android 实现自动拍照,Android自定义相机实现定时拍照功能
这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能. 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: activity_main.xml andro ...
- android自动对焦第一次对焦,Android自定义相机实现自动对焦和手动对焦
Android自定义相机实现自动对焦和手动对焦: 不调用系统相机,因为不同的机器打开相机呈现的界面不统一也不能满足需求. 所以为了让程序在不同的机器上呈现出统一的界面,并且可以根据需求进行布局,做了此 ...
- Android自定义相机实现定时拍照
这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能. 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: activity_main.xml <F ...
- Android 自定义相机Demo 入门学习
Android 自定义相机Demo 本文是参考网上一些自定义相机示例,再结合自己对相机的功能需求写的,基本上包含了很多基本功能,比如相机对焦.闪光灯,以及在手机预览界面上绘制自己想要绘制的图案. 话不 ...
- Android自定义相机,切换前后摄像头,照相机拍照
Android自定义相机,简单实现切换前后摄像头,照相机拍照 Ctrl +C Ctrl+V 可以直接 run 起来,注释比较详细;源码下载 <?xml version="1.0&qu ...
最新文章
- 面对大规模AI集成,企业为何迟迟犹豫?
- Python基础05 缩进和选择
- 频域补零上采样_AURIX 学习笔记(12)频域法互相关实现超声测距
- Windows Server 2012系列之二安装AD及创建域
- html 给 ol添加abc,英语abc怎么写
- 【PAT - 甲级1020】Tree Traversals (25分)(树的遍历,给定中序后序,求层次遍历)
- JavaScript实现向OL列表内动态添加LI元素的方法
- html 拖拽坐标,Html+css实现拖拽导航条
- 剖析Caffe源码之ImageDataLayer
- 公司团建还真是一门智慧
- 通过js滚轮滚动时调用动画_WOW.js在页面滚动时展现动感的元素动画效果
- 假设计算机学院二年级,二年级计算机信息教案.doc
- 初探Linux内核态——通过proc文件系统作快速问题定位
- python3.5中文手册chm_python3官方帮助文档-python3.5.2官方chm参考手册-东坡下载
- Oracle 日历表详解(含节假日)
- 发改委印发《关于促进分享经济发展的指导性意见》
- 2DPCA—二维主成分分析详解及编程
- EXT.JS 学习笔记
- 计算机编程学英语词汇,计算机编程 常用术语英语词汇大全
- Chrome-Chrome源码剖析
热门文章
- ArtistV1——艺术家V1[STM32F1 | 写字机 | GRBL | LVGL | WIFI]
- 使用kazoo连接zookeeper并监听节点数量以及值变化
- lol服务器不稳定向全体玩家道歉,官方因服务器不稳定向全体玩家正式道歉,并补偿源代码娜美皮肤!...
- iOS篇—Demo3—图案解锁
- 锐捷RLDP理论及实验讲解
- 在matplotlib中使用楷体字体
- windows10企业版安装西门子博途V15---03安装仿真软件
- 树莓派4B安装QT和OpenCV
- NOJ 1145.求图像的周长
- MOGRE学习笔记(3)--MOGRE小项目练习