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
原创粉丝点击