12

我正在创建一个相机应用程序,它将使用点击对焦功能,就像许多标准相机应用程序一样。我首先获取触摸事件的 (x,y) 坐标,然后将此值传递给 UI。然后,我尝试设置焦点区域,如下所示:

Rect newRect = new Rect(left,top,right, bottom);
Camera.Parameters params = mCamera.mCameraInstance.getParameters();
Camera.Area focusArea = new Camera.Area(newRect, 1000);
List<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
focusAreas.add(focusArea);
params.setFocusAreas(focusAreas);

但是,它似乎没有任何效果。因此,我将一些值硬编码到矩形中(这样,我可以从触摸事件中排除错误的坐标)。 根据文档,它正在寻找空间中的坐标 (-1000, -1000)(左上) 到 (1000, 1000)(右下)。

所以我用这个替换了上面的矩形:

//should target a 100x100 square in the center of the screen
Rect newRect = new Rect(-50,-50,50, 50);

而且,似乎没有任何效果。我知道我的相机支持设置焦点区域,因为首先,相机应用程序成功使用它,并且 params.getMaxNumFocusAreas() 返回 1。

如果有人过去成功使用过这个,请告诉我!!

编辑:

我发现这个类似的问题似乎也表明这个 API 根本不适用于 Android 4.0 设备及更高版本(我在 4.1.1、Galaxy S3 上进行测试)。然而,这些设备上的相机应用程序仍然肯定具有点击对焦功能。我错过了什么???

4

3 回答 3

1

我今天遇到了这个问题:/

经过几个小时的努力,我找到了解决方案!

这很奇怪,但似乎在设置焦点区域之前将焦点模式设置为“宏”解决了问题;)

params.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
params.setFocusAreas(focusAreas);
mCamera.setParameters(params);

我有搭载 Android 4.1.2 的 Galaxy S3

我希望这对你也有用:)

于 2013-09-29T00:27:17.723 回答
0

在仔细阅读 4.3 源代码并盯着相机 API 几个小时后,我发现了这个功能

public final void autoFocus (Camera.AutoFocusCallback cb)

因此,您应该能够在代码中添加几行:

Rect newRect = new Rect(left,top,right, bottom);
Camera.Parameters params = mCamera.mCameraInstance.getParameters();
Camera.Area focusArea = new Camera.Area(newRect, 1000);
List<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
focusAreas.add(focusArea);
params.setFocusAreas(focusAreas);

/**
 * ISO changes occurs passively after setting it in the cameraParams. Auto focus
 * parameters that have been set don't take affect until calling Camera.autoFocus()
 */
mCamera.autoFocus(new Camera.AutoFocusCallback()
{
    @Override
    public void onAutoFocus(boolean success, Camera camera)
    {
        Log.d(TAG, "onAutoFocus() " + success);
    }
});
于 2013-10-20T01:20:55.820 回答
0

它对我也不起作用,但无论如何,在设置你的矩形时,请确保 left < righttop < bottom!您正在将您的矩形设置为 -100 的高度!而且,顺便说一句,您没有设置 50x50 的正方形,而是 100x-100。

于 2013-04-18T09:31:51.267 回答