2013-06-10 1 views
9

Как это выглядит: http://i41.tinypic.com/30278m1.pngFix соотношение Android приложения камеры аспект и вращение

Похоже, в ПОС, я хочу, чтобы иметь правильное соотношение сторон с правильным rotaion

посмотрите код пожалуйста , как я могу это исправить?

Это мой код:

public class MainActivity extends Activity implements SurfaceHolder.Callback { 

Camera mCamera; 
SurfaceView mPreview; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mPreview = (SurfaceView)findViewById(R.id.preview); 
    mPreview.getHolder().addCallback(this); 
    mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    mCamera = Camera.open(); 
} 
@Override 
public void onPause() { 
    super.onPause(); 
    mCamera.stopPreview(); 
}  
@Override 
public void onDestroy() { 
    super.onDestroy(); 
    mCamera.release(); 
} 
@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
    Camera.Parameters params = mCamera.getParameters(); 
    List<Camera.Size> sizes = params.getSupportedPreviewSizes(); 
    Camera.Size selected = sizes.get(0); 
    params.setPreviewSize(selected.width,selected.height); 
    mCamera.setParameters(params); 
    mCamera.startPreview(); 
} 
@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    try { 
     mCamera.setPreviewDisplay(mPreview.getHolder()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    Log.i("PREVIEW","surfaceDestroyed"); 
} 
} 

ответ

7

Изменить surfaceChanged метод с этим:

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {  
    Parameters parameters = mCamera.getParameters(); 
    List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes(); 
    Camera.Size previewSize = previewSizes.get(4); //480h x 720w 

    parameters.setPreviewSize(previewSize.width, previewSize.height); 
    parameters.setFlashMode(Parameters.FLASH_MODE_AUTO); 
    parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 

    mCamera.setParameters(parameters); 

    Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    if(display.getRotation() == Surface.ROTATION_0) {       
     mCamera.setDisplayOrientation(90); 
    } else if(display.getRotation() == Surface.ROTATION_270) { 
     mCamera.setDisplayOrientation(180); 
    } 

    mCamera.startPreview(); 
} 

Я надеюсь, что я помог вам!

+0

isPreviewRunning & getContext отмечены как ошибки! isPreviewRunning не может быть разрешен переменной & Метод getContext() не определен –

+0

Хорошо, я просто изменил свой ответ. –

+1

замечательный произведение mikhael !! это сработало, я взглянул на ваш сайт, на котором вы сделали хорошие проекты. –

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