鱼C论坛

 找回密码
 立即注册
查看: 3632|回复: 5

android学习之实现简单的录像功能

[复制链接]
发表于 2014-11-17 19:15:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
录像功能的实现:

1.所需要的权限:
 <uses-permission android:name="android.permission.CAMERA"/>    <!--摄像头的权限-->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   <>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2.xml布局的配置:

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

   
   <SurfaceView 
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:id="@+id/surfaceView"
       />
    <RelativeLayout
       android:id="@+id/layout"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:visibility="gone" >

       <Button
           android:id="@+id/start"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentBottom="true"
           android:layout_alignParentRight="true"
           android:layout_marginRight="17dp"
           android:text="录像" 
           android:onClick="startVoide"
           android:enabled="true"
           />

       <Button
           android:id="@+id/stop"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentBottom="true"
           android:layout_marginRight="14dp"
           android:layout_toLeftOf="@+id/start"
           android:text="停止" 
           android:onClick="startVoide"
            android:enabled="false"
           />

   </RelativeLayout>

</FrameLayout>
3.acativity里面的代码:

package com.example.view_player;

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.view.Menu;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.RelativeLayout;

public class MainActivity extends Activity {

        private SurfaceView surfaceView;   //视频显示区域的声明
        private RelativeLayout layout;   //相对布局的声明
        private Callback callback;   //
        private Camera camera;
        private MediaRecorder mediaRecorder;   //媒体录制
        private Button start;   //按钮
        private Button stop;
        
        @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);
                
                start = (Button) this.findViewById(R.id.start);
                this.stop = (Button) this.findViewById(R.id.stop);
                
                layout = (RelativeLayout) this.findViewById(R.id.layout);
                surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
                callback = new MyCallback();
                surfaceView.getHolder().addCallback(callback);
        }
        
        private class MyCallback implements Callback   //回调类
        {

                @Override
                public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
                                int arg3) {
                        // TODO Auto-generated method stub
                        
                }

                @Override
                public void surfaceCreated(SurfaceHolder arg0) {   
                        // TODO Auto-generated method stub
                        try
                        {
                                camera = Camera.open();    //打开摄像
                                
                                camera.setPreviewDisplay(surfaceView.getHolder());
                                camera.startPreview();  //开始预览
                        }catch(Exception e)
                        {
                                e.printStackTrace();
                        }
                }

                @Override
                public void surfaceDestroyed(SurfaceHolder arg0) {
                        // TODO Auto-generated method stub
                        if(camera != null)
                        {
                                camera.stopPreview();   //停止预览
                                camera.release();      //释放资源
                                camera = null;
                        }
                }
                
        }
        
        public void startVoide(View v)
        {
                switch(v.getId())
                {
                case R.id.start:
                        start.setEnabled(false);
                        stop.setEnabled(true);
                        try
                        {
                                File file = new File(Environment.getExternalStorageDirectory()
                                                + "/" + System.currentTimeMillis() + ".3gp");
                                camera.unlock();
                                mediaRecorder = new MediaRecorder();    //媒体录制对象
                                mediaRecorder.setCamera(camera);   //设置摄像
                                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);   
                                mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
                                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  //设置输出的文件的格式
                                mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);   //设置编码
                                mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
                                mediaRecorder.setOutputFile(file.getAbsolutePath());   //设置输出文件的路径
                                mediaRecorder.setVideoSize(320, 240);  //设置video的大小
                                mediaRecorder.setVideoFrameRate(5);   
                                mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
                                mediaRecorder.prepare();   //缓冲
                                mediaRecorder.start();   //开始录制
                                
                        }catch (Exception e) {
                                // TODO: handle exception
                                e.printStackTrace();
                        }
                        break;
                case R.id.stop:
                        start.setEnabled(true);
                        stop.setEnabled(false);
                        if(mediaRecorder != null)
                        {
                                mediaRecorder.stop();   //停止
                                mediaRecorder.reset();   //重置
                                mediaRecorder.release();    //释放资源
                                camera.lock();
                                mediaRecorder = null;
                        }
                        break;
                }
        }

        @Override
        public boolean onTouchEvent(MotionEvent event) {
                // TODO Auto-generated method stub
                layout.setVisibility(ViewGroup.VISIBLE);   //当触屏的时候按钮可见
                return super.onTouchEvent(event);
        }
}




本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-17 19:38:35 | 显示全部楼层
@大黑鱼 支持玄玄~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-17 19:56:48 | 显示全部楼层
支持不犹豫!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-9 13:18:56 | 显示全部楼层
支持楼楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-2 17:25:40 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-20 15:17:00 | 显示全部楼层
{:1_1:}{:1_1:}{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 11:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表