Обратный вызов автофокуса камеры Droid X всегда возвращает false - PullRequest
2 голосов
/ 30 ноября 2011

Я использую Motorola Droid X и по какой-то причине переменная успеха в onAutoFocus (логический успех, камера) всегда возвращает false.Кажется, что он работает с другими устройствами, включая Droid 2, так что, похоже, это проблема конкретного устройства.

Мой код в основном такой:

camera.autoFocus(new AutoFocusCallback() {
    @Override
    public void onAutoFocus(boolean success, Camera camera) {
        takePicture();
    }
});

Ответы [ 3 ]

5 голосов
/ 30 ноября 2011

После нескольких часов отладки проблема заключалась в том, чтобы установить размер предварительного просмотра для поверхности в большом размере. Я не понимаю, почему это повлияет на автофокус, но установка меньшего размера для предварительного просмотра устранила проблему. Это может быть вызвано тем, что размер предварительного просмотра больше разрешения экрана, потому что это единственное разрешение, которое не работает. Надеюсь, что это поможет всем, кто может столкнуться с этой проблемой.

Обновление: Я снова столкнулся с этой проблемой после изменения макета страницы предварительного просмотра, и кажется, что фокус только при определенных размерах предварительного просмотра. Пока эти размеры мне не удавались: 720х480, 1280х720

0 голосов
/ 12 апреля 2012

Я должен был пойти с 0,3 для моего на работу.

final double ASPECT_TOLERANCE = 0.3; // this was 0.1

Кроме того, я обнаружил, что если бы я позвонил startPreview() в surfaceCreated(SurfaceHolder holder), автофокус работал бы с лучшим соотношением сторон предварительного просмотра. Но тогда предварительный просмотр вообще не будет работать на Галактике.

0 голосов
/ 23 января 2012

Я согласен с ответом dt0.Я использую класс Preview из примера Android, и для его исправления я просто увеличил допуск на аспект при определении оптимального размера предварительного просмотра:

private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
    final double ASPECT_TOLERANCE = 0.2; // this was 0.1
    double targetRatio = (double) w / h;
    ...
}

С этим изменением, вместо того, чтобы установить оптимальный размер 720x480.(что приводит к сбою автофокуса), он устанавливает оптимальный размер 640x480, который проходит.Я до сих пор не понимаю, почему это решает проблему (фактическое представление имеет размер 734x480), но я счастлив, что это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...