Android从零开始(26)(设置全屏+横屏、相机拍照、视频录制)(新)

相机拍照、视频录制相机拍照

全屏显示有两种方式:

在androidManifest.xml里面的application标签下设置

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"全屏显示


Java代码

  1. //指定Activity没有标题(一定要在setContentView之前调用)  
  2. requestWindowFeature(Window.FEATURE_NO_TITLE);  
  3. setContentView(R.layout.main);  
  4. //全屏显示  
  5. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                 WindowManager.LayoutParams.FLAG_FULLSCREEN);  


设置横屏

androidManifest.xml里面的activity标签下设置

android:screenOrientation="landscape"横屏显示


相机代码

  1.        /** surfaceview的创建是在Activity完全显示之后,才创建 
  2.         * 只能使用回调监听 
  3.         * */  
  4.      
  5.    @Override  
  6.    public void onCreate(Bundle savedInstanceState) {  
  7.        super.onCreate(savedInstanceState);  
  8.        //指定Activity没有标题(一定要在setContentView之前调用)  
  9.        requestWindowFeature(Window.FEATURE_NO_TITLE);  
  10.         
  11.         setContentView(R.layout.main);  
  12.        //全屏显示  
  13.        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  14.         
  15.         
  16.        surfaceview = (SurfaceView) findViewById(R.id.surfaceview);  
  17.               // 通过holder来设置surfaceview的参数  
  18.        SurfaceHolder holder = surfaceview.getHolder();  
  19.               // 设置显示固定大小  
  20.        holder.setFixedSize(176144);  
  21.               // 不要让SurfaceView 缓存数据,直接输出  
  22.        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  23.         
  24.        //保持屏幕的高亮  
  25.        surfaceview.setKeepScreenOn(true);  
  26.         
  27.        //添加Surfaceview的创建监听  
  28.        holder.addCallback(new MyCallback());  
  29.         
  30.         
  31.         
  32.     }  
  33.      
  34.      
  35.    private class MyCallback implements Callback{  
  36.               @Override  
  37.               public void surfaceCreated(SurfaceHolderholder) {  
  38.                      //TODO Auto-generated method stub  
  39.                      try{  
  40.                             //得到相机对象  
  41.                             camera = Camera.open();  
  42.                             //相机的参数  
  43.                             Parameters parameters =camera.getParameters();  
  44.                             Log.i("i",parameters.flatten());  
  45.                              
  46.                             //设置预览显示  
  47.                             camera.setPreviewDisplay(holder);  
  48.                             //开始预览  
  49.                             camera.startPreview();  
  50.                      }catch (Exception e) {  
  51.                             // TODO Auto-generated catch block  
  52.                             e.printStackTrace();  
  53.                      }  
  54.               }  
  55.               @Override  
  56.               public void surfaceChanged(SurfaceHolderholder, int format, int width,  
  57.                             int height) {  
  58.                      //TODO Auto-generated method stub  
  59.                        
  60.               }  
  61.               @Override  
  62.               public voidsurfaceDestroyed(SurfaceHolder holder) {  
  63.                      //TODO Auto-generated method stub  
  64.                      if(camera!= null){  
  65.                 camera.release();  
  66.                 camera= null;  
  67.                   }  
  68.               }  
  69.              
  70.     }  
  71.      
  72.    //对焦都是由硬件直接完成  
  73.    public void foucs(View v){  
  74.            camera.autoFocus(null);  
  75.     }  
  76.      
  77.      
  78.    public void take(View v){  
  79.            /** 
  80.             *shutter,快门 
  81.             *raw, 相机捕获的原始数据 
  82.             *jpeg 相机处理后的数据 
  83.             */  
  84.            camera.takePicture(nullnull, newMyPictureCallback());  
  85.     }  
  86.      
  87.    private class MyPictureCallback implements PictureCallback{  
  88.               @Override  
  89.               public void onPictureTaken(byte[] data,Camera camera) {  
  90.                      //TODO Auto-generated method stub  
  91.                      try{  
  92.                             File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");  
  93.                             FileOutputStream fos = newFileOutputStream(file);  
  94.                             fos.write(data);  
  95.                             fos.close();  
  96.                              
  97.                             //处理照片的时候,相机被占用了。要想重新预览,就开始预览  
  98.                             camera.startPreview();  
  99.                              
  100.                      }catch (Exception e) {  
  101.                             // TODO Auto-generated catch block  
  102.                             e.printStackTrace();  
  103.                      }  
  104.                        
  105.               }  
  106.              
  107.     }  
  108.      
  109.    @Override  
  110.    protected void onDestroy() {  
  111.            // TODO Auto-generated method stub  
  112.            super.onDestroy();  
  113.              
  114.     }  
  115.      
  116. }  

所需权限:   

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
  2. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
  3. <uses-permission android:name="android.permission.CAMERA"/>  


视频录制

  1. public class MainActivity extends Activity{  
  2.    private SurfaceView surfaceview;  
  3.        privateMediaRecorder mr;  
  4.        privateButton bt_start;  
  5.        privateButton bt_stop;  
  6.        /**Called when the activity is first created. */  
  7.    @Override  
  8.    public void onCreate(Bundle savedInstanceState) {  
  9.        super.onCreate(savedInstanceState);  
  10.        setContentView(R.layout.main);  
  11.         
  12.        surfaceview = (SurfaceView) findViewById(R.id.surfaceview);  
  13.         
  14.        bt_start = (Button) findViewById(R.id.bt_start);  
  15.        bt_stop = (Button) findViewById(R.id.bt_stop);  
  16.           
  17.        SurfaceHolder holder = surfaceview.getHolder();  
  18.        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  19.        holder.setFixedSize(176144);  
  20.         
  21.        surfaceview.setKeepScreenOn(true);  
  22.         
  23.     }  
  24.      
  25.    public void start(View v){  
  26.            try {  
  27.                      mr = new MediaRecorder();  
  28.                      mr.reset();  
  29.                        
  30.                      mr.setAudioSource(AudioSource.MIC);  
  31.                      mr.setVideoSource(VideoSource.CAMERA);  
  32.                        
  33.                      mr.setOutputFormat(OutputFormat.THREE_GPP);  
  34.                        
  35.                      mr.setAudioEncoder(AudioEncoder.AMR_NB);  
  36.                      mr.setVideoEncoder(VideoEncoder.H264);  
  37.                        
  38.                      Filefile = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3gp");  
  39.                      mr.setOutputFile(file.getAbsolutePath());  
  40.                        
  41.                      //设置预览显示  
  42.                      mr.setPreviewDisplay(surfaceview.getHolder().getSurface());  
  43.                        
  44.                        
  45.                      mr.prepare();  
  46.                      mr.start();  
  47.                        
  48.                      bt_start.setEnabled(false);  
  49.                      bt_stop.setEnabled(true);  
  50.               } catch (Exception e) {  
  51.                      //TODO Auto-generated catch block  
  52.                      e.printStackTrace();  
  53.               }  
  54.     }  
  55.    public void stop(View v){  
  56.            mr.stop();  
  57.            bt_start.setEnabled(true);  
  58.               bt_stop.setEnabled(false);  
  59.     }  
  60.      
  61.    @Override  
  62.     protected voidonDestroy() {  
  63.            //TODO Auto-generated method stub  
  64.            super.onDestroy();  
  65.              
  66.            if(mr!= null){  
  67.                   mr.release();  
  68.                   mr = null;  
  69.            }  
  70.     }  
  71. }  

所需权限:

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


课后问题

怎么设置全屏显示

全屏显示有两种方式:

在androidManifest.xml里面的application标签下设置

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"全屏显示

Java代码

//指定Activity没有标题(一定要在setContentView之前调用)

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.main);

//全屏显示

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                 WindowManager.LayoutParams.FLAG_FULLSCREEN);


怎么设置横屏显示

设置横屏

androidManifest.xml里面的activity标签下设置

android:screenOrientation="landscape"横屏显示


Camer在使用的是是否需要权限

需要


使用哪个类可以完成视频的刻录

MediaRecorder

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值