Невидим SurfaceView за преглед на камерата

Трябва да получа само данни за преглед на камерата, но не и видим преглед. Тъй като правя всичко това в услуга, трябваше да създам фиктивен SurfaceView, който работи много добре.

Използвах кода от този отговор: https://stackoverflow.com/a/10268650/1395697

С TYPE_SYSTEM_OVERLAY обаче не се получи. Беше невидим, но не бяха получени данни за визуализация (в onPreviewFrame()). Когато променя този аргумент на 0, получавам данни за визуализация, но SurfaceView се вижда.

Знаете ли друг начин да направите това?

Това, което направих сега, е просто да направя видимо SurfaceView с ширина и височина 1 и след това да създам наслагване ImageView със специфичен цвят, така че да не виждате промяната на цвета на SurfaceView. Но това изобщо не е добре и наистина бих искал да го направя малко по-добре.


person DominicM    schedule 09.06.2012    source източник
comment
Вижте stackoverflow.com/questions/22462360   -  person fadden    schedule 19.02.2015


Отговори (2)


аз също използвах същия отговор на stackOverflow и получих същия проблем.

добавих този код

this.setZOrderOnTop(true);
SurfaceHolder h = this.getHolder();
h.setFormat(PixelFormat.TRANSPARENT);

към моя метод surfaceChanged, вместо дейността (или услуга в моя случай) и го направих прозрачен, но регистрационният файл се оплаква от изоставени рамки :(

person Arkady    schedule 20.06.2013

Всъщност изобщо не е нужно да поставяте SurfaceView във вашия потребителски интерфейс. Сблъскахме се със същия проблем и направихме фиктивен SurfaceView. Ето нашия код:

SurfaceView dummy = new SurfaceView(c);
try {
    mCamera.setPreviewDisplay(dummy.getHolder());
} catch (IOException e) {

}
mCamera.setPreviewCallback(this);
mCamera.startPreview();
person Zaid Daghestani    schedule 09.06.2012
comment
Това си помислих и аз. На повечето устройства работи дори без дисплей за предварителен преглед, така че вашият метод очевидно работи и на тези устройства. Въпреки това, на някои устройства като HTC One X или Google Nexus One не работи без SurfaceView, нито с вашия метод - person DominicM; 09.06.2012
comment
Мамка му. Благодарим ви, че решихте нашия проблем. Не трябваше да го тестваме, така че нямахме представа какво се случва. Оценявам го! :Д - person Zaid Daghestani; 09.06.2012
comment
Аз също нямах такъв, за да го тествам, но получих доклади за грешки, така че пуснах актуализация с вашия метод и ги попитах дали работи сега, но все още не работи. С новата актуализация най-накрая проработи (с метода във въпроса ми), но все пак бих искал да го подобря, тъй като според мен методът ми е наистина ужасен... - person DominicM; 09.06.2012
comment
Хм, да, проучвах го и единственият метод, който изглежда работеше, беше нашият, но очевидно е само на някои устройства. Чудя се дали има начин да използвам този метод на устройства, на които работи, и другия метод на устройства, на които не работи. - person Zaid Daghestani; 09.06.2012