android录制视频横向,Android从零开始(26)(设置全屏+横屏、相机拍照、视频录制)(新)...
相機(jī)拍照、視頻錄制相機(jī)拍照
全屏顯示有兩種方式:
在androidManifest.xml里面的application標(biāo)簽下設(shè)置
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"全屏顯示
Java代碼
//指定Activity沒有標(biāo)題(一定要在setContentView之前調(diào)用)
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
//全屏顯示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,?????????????????WindowManager.LayoutParams.FLAG_FULLSCREEN);
設(shè)置橫屏
在androidManifest.xml里面的activity標(biāo)簽下設(shè)置
android:screenOrientation="landscape"橫屏顯示
相機(jī)代碼
/**?surfaceview的創(chuàng)建是在Activity完全顯示之后,才創(chuàng)建
*?只能使用回調(diào)監(jiān)聽
*?*/
@Override
publicvoidonCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
//指定Activity沒有標(biāo)題(一定要在setContentView之前調(diào)用)
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
//全屏顯示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
surfaceview?=?(SurfaceView)?findViewById(R.id.surfaceview);
//?通過holder來設(shè)置surfaceview的參數(shù)
SurfaceHolder?holder?=?surfaceview.getHolder();
//?設(shè)置顯示固定大小
holder.setFixedSize(176,144);
//?不要讓SurfaceView?緩存數(shù)據(jù),直接輸出
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//保持屏幕的高亮
surfaceview.setKeepScreenOn(true);
//添加Surfaceview的創(chuàng)建監(jiān)聽
holder.addCallback(newMyCallback());
}
privateclassMyCallbackimplementsCallback{
@Override
publicvoidsurfaceCreated(SurfaceHolderholder)?{
//TODO?Auto-generated?method?stub
try{
//得到相機(jī)對(duì)象
camera?=?Camera.open();
//相機(jī)的參數(shù)
Parameters?parameters?=camera.getParameters();
Log.i("i",parameters.flatten());
//設(shè)置預(yù)覽顯示
camera.setPreviewDisplay(holder);
//開始預(yù)覽
camera.startPreview();
}catch(Exception?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
@Override
publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
intheight)?{
//TODO?Auto-generated?method?stub
}
@Override
publicvoidsurfaceDestroyed(SurfaceHolder?holder)?{
//TODO?Auto-generated?method?stub
if(camera!=null){
camera.release();
camera=?null;
}
}
}
//對(duì)焦都是由硬件直接完成
publicvoidfoucs(View?v){
camera.autoFocus(null);
}
publicvoidtake(View?v){
/**
*shutter,快門
*raw,?相機(jī)捕獲的原始數(shù)據(jù)
*jpeg?相機(jī)處理后的數(shù)據(jù)
*/
camera.takePicture(null,null,?newMyPictureCallback());
}
privateclassMyPictureCallbackimplementsPictureCallback{
@Override
publicvoidonPictureTaken(byte[]?data,Camera?camera)?{
//TODO?Auto-generated?method?stub
try{
File?file?=?newFile(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");
FileOutputStream?fos?=?newFileOutputStream(file);
fos.write(data);
fos.close();
//處理照片的時(shí)候,相機(jī)被占用了。要想重新預(yù)覽,就開始預(yù)覽
camera.startPreview();
}catch(Exception?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
}
@Override
protectedvoidonDestroy()?{
//?TODO?Auto-generated?method?stub
super.onDestroy();
}
}
所需權(quán)限:
視頻錄制
publicclassMainActivityextendsActivity{
privateSurfaceView?surfaceview;
privateMediaRecorder?mr;
privateButton?bt_start;
privateButton?bt_stop;
/**Called?when?the?activity?is?first?created.?*/
@Override
publicvoidonCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
surfaceview?=?(SurfaceView)?findViewById(R.id.surfaceview);
bt_start?=?(Button)?findViewById(R.id.bt_start);
bt_stop?=?(Button)?findViewById(R.id.bt_stop);
SurfaceHolder?holder?=?surfaceview.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.setFixedSize(176,144);
surfaceview.setKeepScreenOn(true);
}
publicvoidstart(View?v){
try{
mr?=?newMediaRecorder();
mr.reset();
mr.setAudioSource(AudioSource.MIC);
mr.setVideoSource(VideoSource.CAMERA);
mr.setOutputFormat(OutputFormat.THREE_GPP);
mr.setAudioEncoder(AudioEncoder.AMR_NB);
mr.setVideoEncoder(VideoEncoder.H264);
Filefile?=?newFile(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3gp");
mr.setOutputFile(file.getAbsolutePath());
//設(shè)置預(yù)覽顯示
mr.setPreviewDisplay(surfaceview.getHolder().getSurface());
mr.prepare();
mr.start();
bt_start.setEnabled(false);
bt_stop.setEnabled(true);
}?catch(Exception?e)?{
//TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
publicvoidstop(View?v){
mr.stop();
bt_start.setEnabled(true);
bt_stop.setEnabled(false);
}
@Override
protectedvoidonDestroy()?{
//TODO?Auto-generated?method?stub
super.onDestroy();
if(mr!=null){
mr.release();
mr?=?null;
}
}
}
所需權(quán)限:
課后問題
怎么設(shè)置全屏顯示
全屏顯示有兩種方式:
在androidManifest.xml里面的application標(biāo)簽下設(shè)置
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"全屏顯示
Java代碼
//指定Activity沒有標(biāo)題(一定要在setContentView之前調(diào)用)
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
//全屏顯示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,? ?? ?? ?? ?? ???WindowManager.LayoutParams.FLAG_FULLSCREEN);
怎么設(shè)置橫屏顯示
設(shè)置橫屏
在androidManifest.xml里面的activity標(biāo)簽下設(shè)置
android:screenOrientation="landscape"橫屏顯示
Camer在使用的是是否需要權(quán)限
需要
使用哪個(gè)類可以完成視頻的刻錄
MediaRecorder
總結(jié)
以上是生活随笔為你收集整理的android录制视频横向,Android从零开始(26)(设置全屏+横屏、相机拍照、视频录制)(新)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 原生砸金蛋 动画,C4D
- 下一篇: android 8 esp8266,ES