当前位置: 首页 > news >正文

Android -- 触摸Area对焦区域(更新)

老早就想找关于不同点击不同地方的对焦,但是一直没有找到,现在项目又需要这个功能,又跑出来找找,最后还是找到啦~~关于对焦更多的是关于自动对焦。

废话不多说,直接来干货,主要是setFocusAreas方式实现的。

每个对角区域是一个具有特定权值的长方形。方向与重力感应的方向有关。这个方向不会受到 setDisplayOrientation(int)设置的影响。矩形的坐标范围从-1000到1000 ,(-1000,-1000)是左上角点(1000,1000)是右下角点。对焦区域的长或宽不能为0或负数,而权值的取值范围是1-1000,权值为矩形范围像素所平分,这意味着同样的权值对焦区域大的对整体的对焦影响小。

Code         

private Rect calculateTapArea(float x, float y, float coefficient) {
        float focusAreaSize = 200;
        int areaSize = Float.valueOf(focusAreaSize * coefficient).intValue();
        Log.i("calculateTapArea", "areaSize--->" + areaSize);//300
        Log.i("calculateTapArea", "x--->" + x + ",,,y--->" + y);//对的
        int centerX = (int) ((x / getResolution().width) * 2000 - 1000);
        int centerY = (int) ((y / getResolution().height) * 2000 - 1000);
        Log.i("calculateTapArea", "getResolution().width--->" + getResolution().width + ",,,,getResolution().height--->" + getResolution().height);
        int left = clamp(centerX - (areaSize / 2), -1000, 1000);
        int top = clamp(centerY - (areaSize / 2), -1000, 1000);
        RectF rectF = new RectF(left, top, left + areaSize, top + areaSize);
        Log.i("calculateTapArea", "left--->" + left + ",,,top--->" + top + ",,,right--->" + (left + areaSize) + ",,,bottom--->" + (top + areaSize));
        Log.i("calculateTapArea", "centerX--->" + centerX + ",,,centerY--->" + centerY);
        return new Rect(Math.round(rectF.left), Math.round(rectF.top),
                Math.round(rectF.right), Math.round(rectF.bottom));
    }
private int clamp(int x, int min, int max) {
        if (x > max) {
            return max;
        }
        if (x < min) {
            return min;
        }
        return x;
    }

    public Camera.Size getResolution() {
        Camera.Parameters params = myCamera.getParameters();
        Camera.Size s = params.getPreviewSize();
        return s;
    }

在OnTouch事件里面调用此方法。

public void focusOnTouch(MotionEvent event) {
        Rect focusRect = calculateTapArea(event.getRawX(), event.getRawY(), 1f);
        Rect meteringRect = calculateTapArea(event.getRawX(), event.getRawY(), 1.5f);
        Camera.Parameters parameters = mCamera.getParameters();
        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
        if (parameters.getMaxNumFocusAreas() > 0) {
            List<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
            focusAreas.add(new Camera.Area(focusRect, 600));
            parameters.setFocusAreas(focusAreas);
        }
        if (parameters.getMaxNumMeteringAreas() > 0) {
            List<Camera.Area> meteringAreas = new ArrayList<Camera.Area>();
            meteringAreas.add(new Camera.Area(meteringRect, 600));
            parameters.setMeteringAreas(meteringAreas);
        }
        mCamera.cancelAutoFocus();
        mCamera.setParameters(parameters);
        mCamera.autoFocus(this);
    }

我是天王盖地虎的分割线   

相关文章:

  • 在CFileDialog对话框中添加控件
  • PLC控制器在污水处理市场的应用分析——多普康自动化制作
  • Windows 2008 部署服务之WDS安装及配置
  • uva 12730(期望经典)
  • 关于 WebWork 中Action 的prepare方法调用多次的问题
  • c# 工具
  • 珍惜眼前
  • 【三维偏序】【分块】bzoj3262 陌上花开
  • Windows 7 Tips! --透明缓存(transparent caching)技术
  • tkinter之文件对话框
  • 不抛弃,不放弃,香巴拉半途之旅
  • 开启ylmf desktop ubuntu的pae支持
  • 日期转化为周次
  • 14套漂亮手机应用图标免费下载
  • Java学习路线图,Java学习计划建议
  • 2017-08-04 前端日报
  • CODING 缺陷管理功能正式开始公测
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • EOS是什么
  • Gradle 5.0 正式版发布
  • in typeof instanceof ===这些运算符有什么作用
  • Invalidate和postInvalidate的区别
  • leetcode-27. Remove Element
  • Node 版本管理
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • vuex 笔记整理
  • vue总结
  • 好的网址,关于.net 4.0 ,vs 2010
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端
  • 如何实现 font-size 的响应式
  • 世界上最简单的无等待算法(getAndIncrement)
  • 说说动画卡顿的解决方案
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 一个项目push到多个远程Git仓库
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​Spring Boot 分片上传文件
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # Panda3d 碰撞检测系统介绍
  • ###STL(标准模板库)
  • ###项目技术发展史
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (四)linux文件内容查看
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原創) 物件導向與老子思想 (OO)
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET BackgroundWorker
  • .NET Core Web APi类库如何内嵌运行?
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter