Auto-Focus(AF) Tag下发主要是研究点击UI界面,选定特定的聚焦区域,如何从应用层下发关键Tag驱使底层对Focus State进行改变,主要是针对ACTIVE的变化状态的研究。
1.点击手机屏幕触发聚焦效果
结合之前俩篇文章,点击屏幕触发的是onSingleTapUp事件,而且肯定也会涉及到request的下发,但是与前篇文章不同之处在于下发的Tag不仅仅是AF Mode、AF Regions、AF Trigger了。
@Override
public boolean onSingleTapUp(float x, float y) {
if (mNeedShowFocusUi) {
mFocusViewController.showActiveFocusAt((int) x, (int) y);
}
mModeHandler.post(new Runnable() {
@Override
public void run() {
//API2 face detection need to config face detect mode
if (mSettingChangeRequester != null) {
//此时下发的Auto-Focus是还没有更新的状态
mSettingChangeRequester.sendSettingChangeRequest();
}
//更新下发的AF Region Tag对应的value为lens需要聚焦的区域
mFocusListener.updateFocusArea(mFocusArea, mMeteringArea);
//更新下发的AF Mode Tag对应的value为AF_MODE_AUTO
mFocusListener.updateFocusMode("auto");
//这边对各种其他的TAG进行处理以及设置
mFocusListener.autoFocus();
}
});
LogHelper.d(mTag, "[onSingleTapUp]-");
return false;
}
//AF Regions的更新
@Override
public void updateFocusArea(List<Camera.Area> focusArea, List<Camera.Area> meteringArea) {
if (focusArea != null) {
mResetAFRoi = checkRectValue(focusArea, mAfRegion);
mAFRegions = new MeteringRectangle[]{new MeteringRectangle(focusArea.get(0).rect,
CAMERA2_REGION_WEIGHT)};
}
if (meterin