При реализации SurfaceHolder.Callback некоторые онлайновые учебные пособия предлагают (на самом деле я обнаружил, что именно это Google написал в демоверсии API)
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Parameters params = camera.getParameters();
params.setPreviewSize(width, height);
camera.setParameters(params);
camera.startPreview();
}
Однако это не практично.Как и на реальном устройстве, подобный код, скорее всего, вызовет исключение на camera.setParameter(params)
, поскольку указанные высота и ширина вряд ли поддерживаются устройством.
Прочитав некоторые вопросы и ответы по stackoverflow, я понял, почему этобыл не прав.В этих сообщениях говорилось, что я должен найти тот, который лучше всего подходит для экрана.Затем я решил напечатать таблицу размеров, которые поддерживает мой телефон (HTC Magic, android 2.1), используя params.getSupportedPreviewSizes();
.Получил их, независимо от ориентации телефона.
h:720 , w:1280
h:480 , w:800
h:480 , w:720
h:480 , w:640
h:432 , w:576
h:320 , w:480
h:240 , w:400
h:288 , w:384
h:288 , w:352
h:240 , w:320
h:272 , w:272
h:240 , w:240
h:160 , w:240
h:144 , w:176
В конце концов, я понятия не имею, как найти наиболее подходящий размер для экрана.И я теперь очень смущен тем, что является правильной программой.Я думаю, что эта программа должна быть довольно распространенной, и мне не нужно придумывать ее самому.
Кто-нибудь может мне помочь и выложить хорошо написанный public void surfaceChanged
образец здесь?
Спасибовы!