Пара наблюдений с моего конца.
1) Camera.autoFocus
- это однократный вызов, применимый при
Camera.getParameters.getFocusMode()
это либо FOCUS-MODE-AUTO
, либо
FOCUS-MODE-MACRO
, в других случаях вам не нужно вызывать
autoFocus
метод. Смотрите API Документы и следуйте им преданно.
2) Одноразовый вызов означает, что этот метод не регистрирует
AutoFocusCallback
экземпляр для непрерывного получения уведомлений.
3) Скорее, FOCUS-MODE-AUTO
даже не является динамичной и непрерывной фокусировкой
постоянная. Вместо этого вы можете использовать FOCUS-MODE-EDOF
или
FOCUS-MODE-CONTINUOUS-PICTURES
в зависимости от уровня API и
Версия SDK, которую вы используете и собираете.
4) Есть каждый
вероятность того, что фактическая камера устройства может не поддерживать некоторые
FOCUS-MODE
константы, такие как EDOF
или INFINITE
. Всегда убедитесь, что
когда вы создаете параметры камеры, вы проверяете
getSupportedFocusModes
и используйте соответствующие константы.
5) Вызов
camera.autoFocus
незадолго до того, как camera.takePicture
может раздуть
результирующий jpeg-byte-array в PictureCallBack
как минимум до 50%
больше, чем его оригинальный размер. Не звонить autoFocus()
явно может
иногда приводит к тому, что предыдущий autoFocus()
заканчивается очень
с низким разрешением, которое может привести к длине массива jpeg-байтов всего
10 Кбайт, что приводит к растровому изображению с нулевым изображением из BitmapFactory
.
6) Относительно разрешений автоматической фокусировки см. Документацию API.
7) Относительно
Zoom, это не так сложно, как реализация автофокуса
особенность. В зависимости от взаимодействия с экраном, например, слайдер или оборудование
такие клавиши, как клавиши регулировки громкости, вы можете реализовать ZoomChangeListener
что вы можете зарегистрироваться в Camera
, как только экземпляр Camera
Получено от open(int cameraId)
.