Android原生视频播放器
来源:互联网 发布:传染病的电影知乎 编辑:程序博客网 时间:2024/06/06 00:05
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(absdetalX<absdetalY){ isAdjust=true; }else{ isAdjust=false; } }else if(absdetalX<threshold&&absdetalY>threshold){ isAdjust=true; }else if(absdetalX>threshold&&absdetalY<threshold){ isAdjust=false; } if(isAdjust){ if(x<screen_width/2){ //调节亮度 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); } }
0 0
- Android原生视频播放器
- ios9 苹果原生视频播放器
- MediaPlayer封装原生视频播放器
- OC原生视频播放
- android 视频播放(一)利用android原生的videoview
- android视频播放(二) 利用android原生的MediaPlayer+SurfaceView
- android视频播放(二) 利用android原生的MediaPlayer+SurfaceView
- android 视频播放---------利用android原生的videoview
- 关于android原生视频播放(转载集合之一)
- 关于android原生视频播放(转载集合之二)
- Android 视频播放器
- android 视频播放器
- android视频播放器
- Android 视频播放器
- android 视频播放器
- android视频播放器
- Android视频播放器
- Android视频播放器
- bzoj 3316 JC loves Mkk
- esri-leaflet入门教程(1)-leaflet介绍
- 结构型设计模式之桥接模式(Bridge Pattern)
- 试举例说明一个典型的垃圾回收算法
- Linux vi/vim的命令说明
- Android原生视频播放器
- 2的次幂表示
- 安卓如何简单的自定义控件实现按钮点击变色
- Linux下Subversion的Transaction check error解决
- POJ 3852 String LD 未翻译 可能会
- thinkphp上传goods表信息+上传图片+缩略图转换
- 自定义任务栏和QQ聊天时间显示效果
- 从基础开始的异世界生活------poj2109
- Java相关