在android中扩展相机视图?

时间:2011-06-15 05:28:54

标签: android android-layout

我在我的应用程序中使用的摄像机视图与本机摄像机不同,例如,本机摄像机视图如下所示, enter image description here

但视图在我的应用程序中并不相同,我使用surfaceview为我的自定义相机与媒体记录器捕获视频,在布局中我使用框架布局,

    

<com.cdr.Vio.CamcorderView android:id="@+id/camcorder_preview" android:clickable="true" android:focusable="true" android:layout_height="wrap_content" android:layout_width="wrap_content"></com.cdr.Vio.CamcorderView>

     ....

<Button android:id="@+id/widget34" android:background="@drawable/camrecord"
    android:layout_height="60dp" android:layout_width="60dp"
    android:layout_gravity="right" android:layout_marginRight="20dp">
</Button>
<Button android:id="@+id/widget33" android:background="@drawable/stoprecord"
    android:layout_gravity="right" android:layout_height="60dp"
    android:layout_width="60dp" android:layout_marginTop="-60dp"
    android:layout_marginRight="20dp">
</Button>

我尝试了具有预定义屏幕高度和屏幕宽度的视图,但它再次看起来有些拉伸,这是我拉伸的相机视图, enter image description here

如果有任何人知道这个问题会帮助我,我该怎么解决呢。

感谢。

2 个答案:

答案 0 :(得分:1)

最后我通过设置videEncodingBitRate,AudioEncodingBitRate,AudioSamplingRate等找到了在android 2.1中录制高质量视频的代码。使用此方法,您可以为视频设置任何想要提供高质量视频的属性。

有关设置高质量和低质量参数的信息,请参阅本页

http://www.andgps.com/20110410/camcorderprofile-predefined-camcorder-profile-settings-for-camcorder-applications

我使用基础版本android 2.1生成高质量视频的代码如下所示。

recorder = new MediaRecorder();
Method[] methods = recorder.getClass().getMethods();

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoFrameRate(24);
recorder.setVideoSize(720, 480);

for (Method method : methods) {
    try {
        if (method.getName().equals("setAudioChannels")) {
            method.invoke(recorder, String.format("audio-param-number-of-channels=%d", 1));
        } else if (method.getName().equals("setAudioEncodingBitRate")) {
            method.invoke(recorder, 12200);
        } else if (method.getName().equals("setVideoEncodingBitRate")) {
            method.invoke(recorder, 3000000);
        } else if (method.getName().equals("setAudioSamplingRate")) {
            method.invoke(recorder, 8000);
        } else if (method.getName().equals("setVideoFrameRate")) {
            method.invoke(recorder, 24);
        }
    } catch (IllegalArgumentException e) {

        e.printStackTrace();
    } catch (IllegalAccessException e) {

        e.printStackTrace();
    } catch (InvocationTargetException e) {

        e.printStackTrace();
    }
}

recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

答案 1 :(得分:0)

看起来纵横比不再是折腾。 尝试更改相机的预分辨率。

在摄像机参数上调用setPreviewSize并在摄像机设备上设置摄像机参数。重新开始预览。

编辑:添加了代码

mCameraDevPara.setPreviewSize(PREVIEW_WIDTH, PREVIEW_HEIGHT);
mCameraDev.setParameters(mCameraDevPara);
mMediaRecoder.setCamera(mCameraDev);

PREVIEW_WIDTHPREVIEW_HEIGHT应该是您要设置的预览分辨率的宽度和高度。