2013-06-10 25 views
9

görünüyor nasıl: http://i41.tinypic.com/30278m1.pngFix Android Camera uygulamasının en boy oranı ve rotasyon

O pic benziyor, ben bir kod bakmak

atın doğru rotaion ile doğru orana lütfen istediğiniz , bunu nasıl düzeltebilirim?

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"); 
} 
} 

cevap

7
bu işte tek surfaceChanged yöntemini değiştirme

: Sana yardımcı olmuştur umut

@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(); 
} 

Bu benim kodudur!

+0

isPreviewRunning & getContext hata olarak işaretlendi! isPreviewRunning, değişkenine dönüştürülemez & getContext() yöntemi tanımsızdır –

+0

Tamam, yalnızca cevabımı değiştirdim. –

+1

mükemmel çalışma mikhael !! işe yaradı, sitenize bir göz attım iyi projeler yaptınız –

İlgili konular