android录制视频横向,Android从零开始(26)(设置全屏+横屏、相机拍照、视频录制)(新)...
相機拍照、視頻錄制相機拍照
全屏顯示有兩種方式:
在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"橫屏顯示
相機代碼
/**?surfaceview的創建是在Activity完全顯示之后,才創建
*?只能使用回調監聽
*?*/
@Override
publicvoidonCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
//指定Activity沒有標題(一定要在setContentView之前調用)
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來設置surfaceview的參數
SurfaceHolder?holder?=?surfaceview.getHolder();
//?設置顯示固定大小
holder.setFixedSize(176,144);
//?不要讓SurfaceView?緩存數據,直接輸出
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//保持屏幕的高亮
surfaceview.setKeepScreenOn(true);
//添加Surfaceview的創建監聽
holder.addCallback(newMyCallback());
}
privateclassMyCallbackimplementsCallback{
@Override
publicvoidsurfaceCreated(SurfaceHolderholder)?{
//TODO?Auto-generated?method?stub
try{
//得到相機對象
camera?=?Camera.open();
//相機的參數
Parameters?parameters?=camera.getParameters();
Log.i("i",parameters.flatten());
//設置預覽顯示
camera.setPreviewDisplay(holder);
//開始預覽
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;
}
}
}
//對焦都是由硬件直接完成
publicvoidfoucs(View?v){
camera.autoFocus(null);
}
publicvoidtake(View?v){
/**
*shutter,快門
*raw,?相機捕獲的原始數據
*jpeg?相機處理后的數據
*/
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();
//處理照片的時候,相機被占用了。要想重新預覽,就開始預覽
camera.startPreview();
}catch(Exception?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
}
@Override
protectedvoidonDestroy()?{
//?TODO?Auto-generated?method?stub
super.onDestroy();
}
}
所需權限:
視頻錄制
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());
//設置預覽顯示
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;
}
}
}
所需權限:
課后問題
怎么設置全屏顯示
全屏顯示有兩種方式:
在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
總結
以上是生活随笔為你收集整理的android录制视频横向,Android从零开始(26)(设置全屏+横屏、相机拍照、视频录制)(新)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 原生砸金蛋 动画,C4D
- 下一篇: andy the android ppt