1、基本使用
private VideoView videoView;
/**
* 本地视频播放
*/
videoView.setVideoPath("");
/**
* 网络视频播放
*/
videoView.setVideoURI(Uri.parse(""));
/**
* 使用MediaController控制视频播放
*/
MediaController controller=new MediaController(this);
/**
* 设置VideoView与MediaConroller类建立关联
*/
videoView.setMediaController(controller);
/**
* 设置MediaConroller与VideoView建立关联
*/
controller.setMediaPlayer(videoView);
2、设置自定义界面,横竖屏切换,调节音量和亮度
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
audioManager=(AudioManager)getSystemService(AUDIO_SERVICE);
/**
* 本地视频播放
*/
videoView.setVideoPath("");
videoView.start();
initView();
//播放器事件
setPlayEvent();
}
private void initView(){
controllayout=(LinearLayout)findViewById(R.id.controllerbar_layour);
videoView=(VideoView) findViewById(R.id.videoView);
pause_img=(ImageView) findViewById(R.id.pause_img);
screen_img=(ImageView) findViewById(R.id.screen_img);
current_text_tv=(TextView)findViewById(R.id.time_current_tv);
time_toatal_tv=(TextView)findViewById(R.id.time_total_tv);
play_seek=(SeekBar)findViewById(R.id.play_seek);
volumm_seek=(SeekBar)findViewById(R.id.volumm_seek);
screen_width=getResources().getDisplayMetrics().widthPixels;
screen_height=getResources().getDisplayMetrics().heightPixels;
videolayout=(RelativeLayout) findViewById(R.id.videolayout);
volume_img=(ImageView)findViewById(R.id.volume_img);
//获取当前设备最大音量
int maxVolume=audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//获取当前设备的音量
int streamVolume=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
volumm_seek.setMax(maxVolume);
volumm_seek.setProgress(streamVolume);
}
@Override
protected void onPause() {
super.onPause();
UIHandler.removeMessages(UPDATE_UI);
}
@Override
protected void onDestroy() {
super.onDestroy();
UIHandler.removeMessages(UPDATE_UI);
}
private void setVideoViewScale(int width,int height){
ViewGroup.LayoutParams params= videoView.getLayoutParams();
params.width=width;
params.height=height;
videoView.setLayoutParams(params);
ViewGroup.LayoutParams params1=videolayout.getLayoutParams();
params1.width=width;
params1.height=height;
videolayout.setLayoutParams(params1);
}
/**
* 更新时间
* @param textView
* @param millisecond
*/
private void updateTextViewWithTimeFormat(TextView textView,int millisecond){
int second=millisecond/1000;
int hh=second/3600;
int mm=second%3600/60;
int ss=second%60;
String str=null;
if(hh!=0){
str=String.format("%02d:%02d:%02d",hh,mm,ss);
}else{
str=String.format("%02d:%02d",mm,ss);
}
textView.setText(str);
}
/**
* 时时更新UI
*/
private Handler UIHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == UPDATE_UI) {
//获取视频当前的播放时间
int currentPosition = videoView.getCurrentPosition();
//获取视频的总时间
int totalduration = videoView.getDuration();
//格式化视频播放时间
updateTextViewWithTimeFormat(current_text_tv, currentPosition);
updateTextViewWithTimeFormat(time_toatal_tv, totalduration);
play_seek.setMax(totalduration);
play_seek.setProgress(currentPosition);
UIHandler.sendEmptyMessageDelayed(UPDATE_UI, 500);
}
}
};
private void setPlayEvent(){
/**
* 控制视频的播放和暂停
*/
pause_img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(videoView.isPlaying()){
//更改图标
//暂停
videoView.pause();
}else{
//更改图标
//继续播放
videoView.start();
UIHandler.sendEmptyMessage(UPDATE_UI);
}
}
});
play_seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
updateTextViewWithTimeFormat(current_text_tv,progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
UIHandler.removeMessages(UPDATE_UI);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress=seekBar.getProgress();
//令视频播放进度遵循seekbar停止拖动的这一刻的进度
videoView.seekTo(progress);
UIHandler.sendEmptyMessage(UPDATE_UI);
}
});
volumm_seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
UIHandler.removeMessages(UPDATE_UI);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
/**
* 横竖屏切换
*/
screen_img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isFullScreen){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}else{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
});
/**
* 控制VideoViewd的手势事件,左边控制亮度,右边音量增减
*/
videoView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float x=event.getX();
float y=event.getY();
float lastX=0,lastY=0;
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
lastX=x;
lastY=y;
break;
case MotionEvent.ACTION_MOVE:
float detalX=x-lastX;
float detalY=y-lastY;
float absdetalX=Math.abs(detalX);
float absdetalY=Math.abs(detalY);
if(absdetalX>threshold&&absdetalY>threshold){
if(absdetalXtrue;
}else{
isAdjust=false;
}
}else if(absdetalXthreshold){
isAdjust=true;
}else if(absdetalX>threshold&&absdetalYfalse;
}
if(isAdjust){
if(x2){
//调节亮度
if(detalY>0){
//降低亮度
}else{
//提高亮度
}
changeBrightness(-detalY);
}else{
if(detalY>0){
//减小声音
}else{
//增大声音
}
changeVolume(-detalY);
}
}
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
});
}
//更改音量
private void changeVolume(float detalY){
int max=audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int current=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
int index=(int)(detalY/screen_height*max*3);
int volume=Math.max(current+index,0);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,volume,0);
volumm_seek.setProgress(volume);
}
//更改亮度
private void changeBrightness(float detalY){
WindowManager.LayoutParams attributes=getWindow().getAttributes();
brightness=attributes.screenBrightness;
float index=detalY/screen_height/3;
brightness+=index;
if(brightness>1.0f){
brightness=1.0f;
}
if(brightness<0.0f){
brightness=0.01f;
}
attributes.screenBrightness=brightness;
getWindow().setAttributes(attributes);
}
//监听到屏幕方向改变
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//当屏幕方向为横屏的时候
if(getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE){
setVideoViewScale(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
volume_img.setVisibility(View.VISIBLE);
volumm_seek.setVisibility(View.VISIBLE);
isFullScreen=true;
//移除半屏状态
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
//设置全屏状态
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
//当屏幕方向为竖屏的时候
else{
setVideoViewScale(ViewGroup.LayoutParams.MATCH_PARENT,240);
volume_img.setVisibility(View.GONE);
volumm_seek.setVisibility(View.GONE);
isFullScreen=false;
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
}
}