【发布时间】:2013-12-09 17:08:33
【问题描述】:
您好,我正在开发一个类似于此链接的 Android 视频应用 http://android-er.blogspot.in/2011/10/video-capture-using-mediarecorder-with.html 视频应用在哪里以框架布局显示。
我正在表面视图上尝试上面的那个,我的 xml 如下所示。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="20sp" >
<SurfaceView
android:id="@+id/CameraView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true" />
<ImageView
android:id="@+id/mybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:src="@drawable/record_video" />
</RelativeLayout>
我不确定为什么它显示黑屏而不是相机视图。我的 ViewActivity.java 如下。
public class ViewActivity extends Activity implements OnClickListener, SurfaceHolder.Callback
{
MediaRecorder recorder;
SurfaceHolder holder;
boolean recording=false;
private MediaRecorder mediaRecorder;
private File file;
private ImageView recVideo;
private SurfaceView cameraView;
private Camera camera;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
recorder = new MediaRecorder();
initRecorder();
setContentView(R.layout.view);
recVideo = (ImageView)findViewById(R.id.mybutton);
cameraView = (SurfaceView) findViewById(R.id.CameraView);
holder = cameraView.getHolder();
holder.addCallback(ViewActivity.this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
recVideo.setClickable(true);
recVideo.setOnClickListener(this);
}
private void initRecorder()
{
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
recorder.setOutputFile(this.initFile().getAbsolutePath());
recorder.setMaxDuration(60000); // Set max duration 60 sec.
recorder.setMaxFileSize(5000000); // Set max file size 5M
}
private void prepareRecorder()
{
recorder.setPreviewDisplay(holder.getSurface());
try
{
recorder.prepare();
} catch (IllegalStateException e)
{
e.printStackTrace();
finish();
}
catch (IOException e)
{
e.printStackTrace();
finish();
}
}
public void onClick(View v)
{
if (recording)
{
recorder.stop();
recording = false;
initRecorder();
prepareRecorder();
Toast.makeText(ViewActivity.this,"Video Saved!",Toast.LENGTH_SHORT).show();
startActivity(new Intent(ViewActivity.this,ViewActivity.class));
finish();
}
else
{
recorder.start();
recording = true;
recVideo.setImageDrawable(getResources().getDrawable(R.drawable.stop_recording));
}
}
public void surfaceCreated(SurfaceHolder holder)
{
prepareRecorder();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height)
{
}
public void surfaceDestroyed(SurfaceHolder holder)
{
if (recording) {
recorder.stop();
recording = false;
}
recorder.release();
finish();
}
我不确定我哪里出错了。如何使表面视图显示相机视图而不是黑屏。
请帮忙。
谢谢!
【问题讨论】:
-
我不太清楚,但你可以试试 recorder.setPreviewDisplay(holder.getSurface());在此 recorder.prepare(); 之后
-
试过了!没有变化。仍然显示黑屏
标签: android android-camera surfaceview android-mediarecorder