2016-04-27 2 views
1

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

public class Preview extends SurfaceView implements SurfaceHolder.Callback { 
private SurfaceHolder holder; 
private Camera camera; 

public Preview(Context context, Camera camera) { 
    super(context); 
    this.camera = camera; 
    holder = getHolder(); 
    holder.addCallback(this); 
    holder.setFixedSize(50, 50); 
} 
public void surfaceCreated(SurfaceHolder holder) { 

    try { 
     camera.setPreviewDisplay(holder); 
     camera.startPreview(); 
    } catch (IOException e) { 
     Log.d("error", "Can't set camera preview: " + e.getMessage()); 
    } 

} 

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

    if (this.holder.getSurface() == null) { 
     return; 
    } 
    try { 
     camera.stopPreview(); 
    } catch (Exception e) { 
    } 
    try { 
     camera.setPreviewDisplay(this.holder); 
     camera.startPreview(); 
    } catch (Exception e) { 
     Log.d("DG_DEBUG", "Error starting camera preview: " + e.getMessage()); 
    } 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 

} 

} 

ответ

0

Проблема заключается в том, что вы не указали тип держателя. Вам необходимо установить тип SURFACE_TYPE_PUSH_BUFFERS. Используйте ниже линии после добавления обратного вызова

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

Так что ваш конструктор должен быть как ниже

public Preview(Context context, Camera camera) { 
    super(context); 
    this.camera = camera; 
    holder = getHolder(); 
    holder.addCallback(this); 
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    holder.setFixedSize(50, 50); 
} 

Я попытался код. Теперь он отлично работает.

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