这是预览效果

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自定义相机加取景框相关推荐

  1. android自定义相机添加蒙板,拍照剪切

    前几天,我写了一篇自定义相机加取景框的文章,这几天,我又研究了一下,进一步写了蒙板,并且拍照出来剪切只留取景框的照片. 加上对之前代码的调整.现在又记录下来 现在的效果是这样的 布局文件 <?x ...

  2. android 自定义相机源码,Android 自定义相机及分析源码

    Android 自定义相机及分析源码 使用Android 系统相机的方法: 要想让应用有相机的action,咱们就必须在清单文件中做一些声明,好让系统知道,如下 action的作用就是声明action ...

  3. Android自定义相机拍照、图片裁剪的实现

    原文:Android自定义相机拍照.图片裁剪的实现 最近项目里面又要加一个拍照搜题的功能,也就是用户对着不会做的题目拍一张照片,将照片的文字使用ocr识别出来,再调用题库搜索接口搜索出来展示给用户,类 ...

  4. 如何为自定义相机添加 取景框|扫描框 |预览框|矩形框

    自定义 相机 及取景框 绘制 在相机预览组件上覆盖一层 自定义ImageView 重写 IamgeView的 ondraw() 方法. 2.要实现第一步 首先要的到矩形框 左上角的 坐标(全屏下是ma ...

  5. android 实现自动拍照,Android自定义相机实现定时拍照功能

    这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能. 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: activity_main.xml andro ...

  6. android自动对焦第一次对焦,Android自定义相机实现自动对焦和手动对焦

    Android自定义相机实现自动对焦和手动对焦: 不调用系统相机,因为不同的机器打开相机呈现的界面不统一也不能满足需求. 所以为了让程序在不同的机器上呈现出统一的界面,并且可以根据需求进行布局,做了此 ...

  7. Android自定义相机实现定时拍照

    这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能. 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: activity_main.xml <F ...

  8. Android 自定义相机Demo 入门学习

    Android 自定义相机Demo 本文是参考网上一些自定义相机示例,再结合自己对相机的功能需求写的,基本上包含了很多基本功能,比如相机对焦.闪光灯,以及在手机预览界面上绘制自己想要绘制的图案. 话不 ...

  9. Android自定义相机,切换前后摄像头,照相机拍照

    Android自定义相机,简单实现切换前后摄像头,照相机拍照 Ctrl +C  Ctrl+V 可以直接 run 起来,注释比较详细;源码下载 <?xml version="1.0&qu ...

最新文章

  1. 面对大规模AI集成,企业为何迟迟犹豫?
  2. Python基础05 缩进和选择
  3. 频域补零上采样_AURIX 学习笔记(12)频域法互相关实现超声测距
  4. Windows Server 2012系列之二安装AD及创建域
  5. html 给 ol添加abc,英语abc怎么写
  6. 【PAT - 甲级1020】Tree Traversals (25分)(树的遍历,给定中序后序,求层次遍历)
  7. JavaScript实现向OL列表内动态添加LI元素的方法
  8. html 拖拽坐标,Html+css实现拖拽导航条
  9. 剖析Caffe源码之ImageDataLayer
  10. 公司团建还真是一门智慧
  11. 通过js滚轮滚动时调用动画_WOW.js在页面滚动时展现动感的元素动画效果
  12. 假设计算机学院二年级,二年级计算机信息教案.doc
  13. 初探Linux内核态——通过proc文件系统作快速问题定位
  14. python3.5中文手册chm_python3官方帮助文档-python3.5.2官方chm参考手册-东坡下载
  15. Oracle 日历表详解(含节假日)
  16. 发改委印发《关于促进分享经济发展的指导性意见》
  17. 2DPCA—二维主成分分析详解及编程
  18. EXT.JS 学习笔记
  19. 计算机编程学英语词汇,计算机编程 常用术语英语词汇大全
  20. Chrome-Chrome源码剖析

热门文章

  1. ArtistV1——艺术家V1[STM32F1 | 写字机 | GRBL | LVGL | WIFI]
  2. 使用kazoo连接zookeeper并监听节点数量以及值变化
  3. lol服务器不稳定向全体玩家道歉,官方因服务器不稳定向全体玩家正式道歉,并补偿源代码娜美皮肤!...
  4. iOS篇—Demo3—图案解锁
  5. 锐捷RLDP理论及实验讲解
  6. 在matplotlib中使用楷体字体
  7. windows10企业版安装西门子博途V15---03安装仿真软件
  8. 树莓派4B安装QT和OpenCV
  9. NOJ 1145.求图像的周长
  10. MOGRE学习笔记(3)--MOGRE小项目练习