Android -- 触摸Area对焦区域_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android -- 触摸Area对焦区域

Android -- 触摸Area对焦区域

 2014/11/19 3:08:46  我爱物联网  程序员俱乐部  我要评论(0)
  • 摘要:老早就想找关于不同点击不同地方的对焦,但是一直没有找到,现在项目又需要这个功能,又跑出来找找,最后还是找到啦~~关于对焦更多的是关于自动对焦。废话不多说,直接来干货,主要是setFocusAreas方式实现的。每个对角区域是一个具有特定权值的长方形。方向与重力感应的方向有关。这个方向不会受到setDisplayOrientation(int)设置的影响。矩形的坐标范围从-1000到1000,(-1000,-1000)是左上角点(1000,1000)是右下角点。对焦区域的长或宽不能为0或负数
  • 标签:android

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

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

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

Code                                                                                   

private Rect calculateTapArea(float x, float y, float coefficient) {
        float focusAreaSize = 300;
        int areaSize = Float.valueOf(focusAreaSize * coefficient).intValue();

        int centerX = (int) (x / getResolution().width - 1000);
        int centerY = (int) (y / getResolution().height - 1000);

        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);

        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事件里面调用此方法。

我是天王盖地虎的分割线                                                             

发表评论
用户名: 匿名