Android 视屏刻录程序

package com.example.videorecord;


import java.io.File;


import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.SurfaceHolder.Callback;
import android.widget.Button;
import android.widget.RelativeLayout;

public class MainActivity extends Activity
{
 private SurfaceView surfaceview=null;
 private RelativeLayout layout=null;
 private Button recordbutton=null,stopbutton=null;
 private MediaRecorder mediaRecord=null;
 private Camera camera=null;
 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
  
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
  setContentView(R.layout.activity_main);
  surfaceview=(SurfaceView)this.findViewById(R.id.surfaceview);
  surfaceview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  surfaceview.getHolder().setFixedSize(176, 144);
  surfaceview.getHolder().setKeepScreenOn(true);
  surfaceview.getHolder().addCallback(new Surfacecallback());
  

  layout=(RelativeLayout)this.findViewById(R.id.layout);
  recordbutton=(Button)this.findViewById(R.id.recordbutton);
  stopbutton=(Button)this.findViewById(R.id.stopbutton);
 }

 private final class Surfacecallback implements Callback
 {

  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width,int height)
  {
   // TODO Auto-generated method stub
  }

  @Override
  public void surfaceCreated(SurfaceHolder holder)
  {
   try
   {
    // TODO Auto-generated method stub
    camera=Camera.open();//打开摄像头
    Camera.Parameters paramsters=camera.getParameters();//设置摄像头参数
    paramsters.setPreviewSize(1280, 720);
    paramsters.setPreviewFrameRate(5);
    paramsters.setPictureSize(1024,768);
    paramsters.setJpegQuality(80);
    //System.out.println(paramsters.flatten());
    camera.setParameters(paramsters);
    camera.setPreviewDisplay(holder);
    camera.startPreview();
   }
   catch (Exception e)
   {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  
  }
  @Override
  public void surfaceDestroyed(SurfaceHolder holder)
  {
   // TODO Auto-generated method stub
   if(camera!=null)
   {
    camera.release();
    camera=null;
   }
   
  }
  
 }
 @Override
 public boolean onTouchEvent(MotionEvent event)
 {
  if(event.getAction()==MotionEvent.ACTION_DOWN)
  {
   layout.setVisibility(ViewGroup.VISIBLE);
  }
  // TODO Auto-generated method stub
  return super.onTouchEvent(event);
 }


 public void record(View v)
 {
  switch(v.getId())
  {
  case R.id.recordbutton:
   try
   {
    camera.release();
    camera=null;
    File videoFile=new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3gp");//设置文件的保存路径
    mediaRecord=new MediaRecorder();
    mediaRecord.setAudioSource(MediaRecorder.AudioSource.MIC);//采集声音来源为麦克风
    mediaRecord.setVideoSource(MediaRecorder.VideoSource.CAMERA);//采集视频来源为摄像图
    mediaRecord.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置视频格式
    mediaRecord.setVideoSize(480, 320);//设置视频大小
    mediaRecord.setVideoFrameRate(5); //设置摄像图每秒捕获的画面数
    mediaRecord.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置声音编码
    mediaRecord.setVideoEncoder(MediaRecorder.VideoEncoder.H264);//设置视频编码
    mediaRecord.setOutputFile(videoFile.getAbsolutePath());//设置文件的存放位置
    mediaRecord.setPreviewDisplay(surfaceview.getHolder().getSurface());//设置屏幕预览
    mediaRecord.prepare();
   
   }
   catch (Exception e)
   {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   mediaRecord.start();
   recordbutton.setEnabled(false);
   stopbutton.setEnabled(true);
   break;
  case R.id.stopbutton:
   if(mediaRecord!=null)
   {
    mediaRecord.stop();
    mediaRecord.release();
    mediaRecord=null;
    recordbutton.setEnabled(true);
    stopbutton.setEnabled(false);
   }
   
   break;
  }
 }

}



需要在配置文件中加入的权限:

<uses-permission android:name="android.permission.CAMERA"/>
 <uses-permission android:name="android.permission.RECORD_AUDIO"/>
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


布局文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
     <SurfaceView
         android:id="@+id/surfaceview"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"/>
     <RelativeLayout
           android:id="@+id/layout"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent" 
          android:visibility="gone">
         <Button
             android:id="@+id/recordbutton"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignParentRight="true"
             android:layout_alignParentBottom="true"
             android:layout_marginRight="10dp"
             android:onClick="record"
             android:text="@string/recordbutton"/>
         <Button
             android:id="@+id/stopbutton"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:onClick="record"
             android:layout_toLeftOf="@id/recordbutton"
             android:layout_alignTop="@id/recordbutton"
             android:layout_marginRight="30dp"
             android:enabled="false"
             android:text="@string/stopbutton"/>
     </RelativeLayout>
</FrameLayout>



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值