Android原生视频播放器

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);
        }
    }

你可能感兴趣的:(Android进阶)