相关疑难解决方法(0)

Android - 相机预览是侧面的

我正在使用预览来显示相机在屏幕上看到的内容.

我可以使一切工作正常,表面创建,表面设置和表面显示.

但是,在纵向模式下,它始终以不正确的90度角显示图像.

如图中所示:

替代文字

我知道使用以下代码将直接设置图片:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)

但是我在Activity中有预览,其中包含其他元素,并且我的Activity在横向模式下显示没有意义.(默认禁用)

所以我想知道是否只是改变预览的方向?并在"纵向"模式下正确显示我的其余活动?

或者无论如何旋转预览以便正确显示?

camera android portrait preview orientation

123
推荐指数
3
解决办法
9万
查看次数

android摄像头surfaceview方向

好的,我有一个扩展SurfaceView和覆盖的类

surfaceChanged - 只需调用startPreview
surfaceCreated - 打开相机,编辑params*,设置surfaceHolder
surfaceDestroyed - 调用stopPreview,释放相机

这一切都很有效,因为当方向是肖像:

来自surfaceCreated*

m_camera = Camera.open();
Camera.Parameters p = m_camera.getParameters();

if (getResources().getConfiguration().orientation != 
    Configuration.ORIENTATION_LANDSCAPE)
{
    p.set("orientation", "portrait");

    // CameraApi is a wrapper to check for backwards compatibility  
    if (CameraApi.isSetRotationSupported())
    {
         CameraApi.setRotation(p, 90);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,每次方向改变时,它都会调用Camera.open()......正如您所知,这是一项非常昂贵的操作,导致转换不是那么顺利.

当我强制定位到横向时,预览很棒.创建只调用一次,因为预览是横向的,相机始终是用户看到的.但是,我需要一种方法来设置纵向拍摄时实际拍摄的照片的方向.当我强制横向渲染时,表面永远不会被重新创建,并且当相机以纵向方式保持时,参数永远不会被设置.

那么如何才能完成以下任一项(专门)?

  1. 当方向发生变化时,保持 onDestroy和onCreate之间的m_camera,以便过渡平滑

  2. 强制风景和检测方向改变另一种方式...旋转最终的snaped图片,如果保持纵向.

此外,如果我离开基地,有人能指出我更好的方向吗?谢谢.

android smartphone orientation android-sdk-2.1 android-camera

29
推荐指数
2
解决办法
5万
查看次数

Android如何修复相机方向

注意相机的视图(不是被捕获的图像)是如何向左翻转的(上图),方向Activity是正确的,但相机视图搞砸了,请帮帮我们:)谢谢.

这是XML布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center|top"
            android:orientation="vertical" >

            <SurfaceView
                android:id="@+id/camerapreview"
                android:layout_margin="10dp"
                android:layout_width="300dp"
                android:layout_height="300dp" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

以下是活动的代码:

public class CustomCameraActivity extends Activity implements SurfaceHolder.Callback {

    Camera camera;
    SurfaceView surfaceView;
    SurfaceHolder surfaceHolder;
    boolean previewing = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.camera);

        surfaceView = (SurfaceView)findViewById(R.id.camerapreview);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) …
Run Code Online (Sandbox Code Playgroud)

camera android orientation android-activity

28
推荐指数
2
解决办法
4万
查看次数

如何将MediaRecorder中的视频方向更改为纵向

当我通过MediaRecorder录制视频时,它始终以横向模式录制,无论实际的设备方向如何.如何强制MediaRecorder/Camera使用真正的方向?

android video-recording device-orientation mediarecorder

27
推荐指数
3
解决办法
3万
查看次数

将相机SurfaceView旋转为纵向

我已经查看了一些关于使用表面视图更改相机方向的帖子,但我从以下示例中获取了代码:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

提供尺寸的功能看起来像这样......

    private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
        final double ASPECT_TOLERANCE = 0.1;
        double targetRatio = (double) w / h;
        if (sizes == null) return null;

        Size optimalSize = null;
        double minDiff = Double.MAX_VALUE;

        int targetHeight = h;

        // Try to find an size match aspect ratio and size
        for (Size size : sizes) {
            double ratio = (double) size.width / size.height;
            if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;
            if (Math.abs(size.height - targetHeight) < minDiff) { …
Run Code Online (Sandbox Code Playgroud)

camera android rotation

12
推荐指数
3
解决办法
4万
查看次数

MediaRecorder以纵向模式捕获视频

我正在尝试制作自定义视频应用.我只使用清单2.2中的设置(API 8).

一切顺利,但我不明白为什么肖像模式视频与lanscape视频没有区别.

为了检测设备改变的方向,我在surfaceChanged()中使用此代码

        if (mCamera != null) {

        Camera.Parameters p = mCamera.getParameters();

        try {
            mCamera.stopPreview();
        } catch (Exception e) {
            // TODO: handle exception
        }

        int previewWidth = 0;
        int previewHeight = 0;

        if (mPreviewSize != null) {
            Display display = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
            int rotation = display.getRotation();

            switch (rotation) {
            case Surface.ROTATION_0:
                previewWidth = mPreviewSize.height;
                previewHeight = mPreviewSize.width;
                mCamera.setDisplayOrientation(90);
                break;

            case Surface.ROTATION_90:
                previewWidth = mPreviewSize.width;
                previewHeight = mPreviewSize.height;
                mCamera.setDisplayOrientation(0);
                break;

            case Surface.ROTATION_180:
                previewWidth = mPreviewSize.height;
                previewHeight …
Run Code Online (Sandbox Code Playgroud)

video android orientation mediarecorder

7
推荐指数
2
解决办法
1万
查看次数