Я создаю приложение для камеры, которое будет использовать функцию крана для фокусировки, как и многие стандартные приложения для камеры. Сначала я получаю координату (x, y) события касания, а затем передаю это значение в пользовательский интерфейс. Затем я пытаюсь установить область фокусировки, например:
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 и выше (im testing на 4.1.1, Galaxy S3). И тем не менее, приложения для камер на этих устройствах по-прежнему имеют функциональность "коснуться". Что мне не хватает???