Reputation: 1254
i'm opening the Camera in my app and the cam display is rotated by 90deg allways even when i rotating the device in my hands.
the code:
import java.io.IOException;
import java.util.List;
import android.content.Context;
import android.hardware.Camera;
import android.view.Display;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
public class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback
{
private SurfaceHolder holder;
private Camera camera;
private Context context;
public CameraSurfaceView(Context context)
{
super(context);
//Initiate the Surface Holder properly
this.holder = this.getHolder();
this.holder.addCallback(this);
this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
this.context = context;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// Now that the size is known, set up the camera parameters and begin
// the preview.
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
Camera.Size size = previewSizes.get(0);
parameters.setPreviewSize(size.width, size.height);
Display display = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
if(display.getOrientation() == Surface.ROTATION_0)
{
//parameters.setPreviewSize(height, width);
parameters.setRotation(90);
}
if(display.getOrientation() == Surface.ROTATION_90)
{
//parameters.setPreviewSize(width, height);
}
if(display.getOrientation() == Surface.ROTATION_180)
{
//parameters.setPreviewSize(height, width);
}
if(display.getOrientation() == Surface.ROTATION_270)
{
//parameters.setPreviewSize(width, height);
parameters.setRotation(180);
}
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try
{
//Open the Camera in preview mode
this.camera = Camera.open();
this.camera.setPreviewDisplay(this.holder);
}
catch(IOException ioe)
{
ioe.printStackTrace(System.out);
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// Surface will be destroyed when replaced with a new screen
//Always make sure to release the Camera instance
camera.stopPreview();
camera.release();
camera = null;
}
}
Any ideas ? Thanks
p.s how do i know what is the correct choose for my device in the line
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
Upvotes: 1
Views: 1264
Reputation: 6023
I used this code, when i wanted to display the camera preview correctly
Camera.Parameters parameters = camera.getParameters();
parameters.set("jpeg-quality", 100);
parameters.set("orientation", "landscape");
parameters.set("rotation", 90);
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
Upvotes: 1
Reputation: 8380
Look at the example code given in Camera.setDisplayOrientation(int degrees)
method reference. Note that you should perform these actions before calling setPreviewDisplay (SurfaceHolder)
Upvotes: 0