我设置了setFocusAreas,没有看到效果效果。代码如下:float x = e.getRawX(); float y = e.getRawY();
int rectX = (int) ((x-halfScreenwidth)/halfScreenwidth*1000); int rectY = (int) ((y-halfScreenHeight)/halfScreenHeight*1000); Camera.Parameters parameters = camera.getParameters(); List<Camera.Area> areas = new ArrayList<Camera.Area>(); areas.add(new Camera.Area(new Rect(rectX, rectY, rectX+10, rectY+10), 1000)); parameters.setMeteringAreas(areas); camera.autoFocus(new AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { if (success) { camera.cancelAutoFocus(); } } });
这个是要硬件支持的,不是所有camera都可以。 先调用getMaxNumFocusAreas()看下是否支持,google的说明: Before using this API or {@link #setFocusAreas(List)}, apps should call {@link #getMaxNumFocusAreas()} to know the maximum number of focus areas first. If the value is 0, focus area is not supported.
float y = e.getRawY();
int rectX = (int) ((x-halfScreenwidth)/halfScreenwidth*1000);
int rectY = (int) ((y-halfScreenHeight)/halfScreenHeight*1000);
Camera.Parameters parameters = camera.getParameters();
List<Camera.Area> areas = new ArrayList<Camera.Area>();
areas.add(new Camera.Area(new Rect(rectX, rectY, rectX+10, rectY+10), 1000));
parameters.setMeteringAreas(areas);
camera.autoFocus(new AutoFocusCallback()
{ @Override
public void onAutoFocus(boolean success, Camera camera)
{
if (success)
{ camera.cancelAutoFocus();
} }
});
先调用getMaxNumFocusAreas()看下是否支持,google的说明:
Before using this API or {@link #setFocusAreas(List)}, apps should
call {@link #getMaxNumFocusAreas()} to know the maximum number of
focus areas first. If the value is 0, focus area is not supported.