2013-09-18 4 views
0

Я пишу приложение, которое требует отображения полупрозрачного слоя PNG над предварительным просмотром камеры. Все было в порядке, пока я не захотел опубликовать его и убедиться, что он работает и на Android 2.x. Похоже, что в старых версиях Android предварительный просмотр камеры вызывает рисование (в моем случае, подкласс ImageView), чтобы не показывать. Когда я избавляюсь от предварительного просмотра, он работает просто отлично - видимое изображение видно, как должно. Он работает как на эмуляторе, так и на реальных устройствах.Drawable не отображается, если присутствует предварительный просмотр камеры

Вот как это выглядит на Android 2.3:

Image 1

и 4.2.2:

Image 2

Я думаю, что было бы слишком много кода, чтобы вставить здесь, так что я Выделили проблематичные части в небольшой проект: http://krzeminski.it/wp-content/uploads/2013/09/DrawableTest.zip. Самый интересный и, пожалуй, виноватый класс: CameraPreview.

Кроме того, я не уверен, почему сам предварительный просмотр не работает. Я читал, что на эмуляторах Android 2.x тестовое изображение с эмулируемой камеры - это просто белое, поэтому я решил, что все в порядке. Тем не менее, мой друг протестировал приложение на своем телефоне с Android 2.3, и предварительный просмотр оказался простым черным. Думаю, это вопрос для отдельного вопроса, но, возможно, вы заметите что-то в коде.

Я потратил, вероятно, 2 дня для решения этих двух проблем, поэтому любые подсказки были бы действительно полезными. Спасибо!

ответ

1

Я столкнулся с этим вопросом некоторое время назад. Я помню, что сообщение на SO рекомендовало, чтобы вы не использовали ImageView#getImageMatrix(). Рассуждая дано было:

общественности Матрица getImageMatrix():

Возврат по желанию матрица представления. Это применяется к отображению вида, когда оно нарисовано. Если нет матрицы, этот метод будет вернуть единичную матрицу. Не изменяйте эту матрицу на месте, но сделайте копию . Если вы хотите использовать другую матрицу, применимую к drawable, обязательно укажите , чтобы вызвать setImageMatrix().

Даже после прочтения этого я не мог/не понял, в чем разница. Я разобрал проблему, используя:

Matrix matrix = new Matrix(); 

Возможно, вы имеете дело с одной и той же проблемой. Попробуй.

+0

Спасибо, вот и все! Предварительный просмотр по-прежнему не отображается, но это еще одна проблема. – PiotrK

+0

@PiotrK Добро пожаловать. Кстати, если вы не видите предварительный просмотр в 2.3, это (я думаю) по умолчанию. Вы не получите тот же экран предварительного просмотра, который вы видите в 4.2.2. Чтобы подтвердить это, запустите эмулятор 2.3, откройте все приложения, выберите/запустите Camera.Вы поймете, что я имею в виду. – Vikram

+0

К сожалению, это не то. Предварительный просмотр может быть черным или белым на 2.x, но мой друг проверил его на реальном 2.3.3 устройстве, и он также ничего не видел. Более того, он МОЖЕТ взять фотографию. Я не могу поверить, что нет рабочего примера предварительного просмотра камеры для Android 2.x. – PiotrK

0

У меня нет устройства Android 2.3. Но я думаю, что, возможно, вы можете попробовать два способа: 1. Изменение FrameLayout к RelativeLayout 2. программно добавить просмотров:

mLayout.addView(mPreview); 
mLayout.addView(mImageView); 
mLayout.addView(mTextView); 
+0

К сожалению, похоже, что это не работает в любом случае. – PiotrK

Смежные вопросы