自定义VideoView或MediaPlayer的MediaController播放样式

项目中需要做一个视频播放模块,大体是用的七牛播放器android端SDK+SurfaceView+自定义MediaController。这里就只介绍自己写的mediaController。下面正式开始。
三步走:重点内容
1. 定义MediaControllerInterface接口
2. 自定义controller类,实现MediaControllerInterface接口
3. 创建播放界面实现MediaControllerInterface.MediaControl接口

第一步:先上代码:


public interface MediaControllerInterface {
   

    void show();//显示

    void show(int time);//显示

    void hide();//隐藏

    boolean isShowing();//是否显示

    void setCollected(boolean isCollected);//是否被收藏

    void setSeekBarEnabled(boolean var1);

    void isCompleted();//设置已经播放完成了

    void To_change_screen(int w,int h);//改变宽高


    interface MediaControl {
   
        void VideoStart();//开始播放

        void VideoResume();//继续播放

        void VideoPause();//暂停

        void VideoStop();//停止

        long getDuration();//视频时长

        long getCurrentPosition();//当前播放进度

        void seekTo(long var1);//拖动进度

        boolean isPlaying();//是否正在播放

        boolean isPausing();//是否是暂停状态

        boolean isFullScreen();//判断是否是全屏状态

        void toCollect();//收藏按钮

        void actionForFullScreen();//收藏按钮
    }
}

这个MediaControllerInterface 接口类主要是为了让controller类实现,与实现了MediaControllerInterface.MediaControl的播放界面类,进行回调操作。
重点在MediaControl接口,需要播放界面实现当中的方法,与controller上面的组件进行绑定。

第二步:部分代码如下:
初始化代码:

//初始化
    private View initView() {
        View view = LayoutInflater.from(mContext).inflate(R.layout.view_controller, null);

        ll_top = (LinearLayout) view.findViewById(R.id.ll_top);
        iv_collect = (ImageView) view.findViewById(R.id.iv_collect);
        iv_center_play = (ImageView) view.findViewById(R.id.iv_center_play);
        ll_bottom = (LinearLayout) view.findViewById(R.id.ll_bottom);
        iv_play = (ImageView) view.findViewById(R.id.iv_play);
        tv_watched = (TextView) view.findViewById(R.id.tv_watched);
        sb_progress = (SeekBar) view.findViewById(R.id.sb_progress);
        tv_total = (TextView) view.findViewById(R.id.tv_total);
        iv_fullscreen = (ImageView) view.findViewById(R.id.iv_fullscreen);

        iv_collect.setOnClickListener(mCollectListener);//收藏监听
        iv_center_play.setOnClickListener(mPlayListener);//播放按钮的监听
        iv_play.setOnClickListener(mPlayListener);//播放按钮的监听
        iv_fullscreen.setOnClickListener(mFullListener);//全屏按钮的监听

        sb_progress.setMax((int) SEEKBAR_MAX);
        //进度条拖动的监听
        sb_progress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                mPlayer.seekTo(mDuration * seekBar.getProgress() / SEEKBAR_MAX);
            }
        });
        return view;
    }

与播放器的绑定:

//添加控制绑定
    public void setControl(MediaControllerInterface.MediaControl mPlayer) {
        this.mPlayer = mPlayer;
    }

    public void setAnchorView(ViewGroup view) {
        mAnchorVGroup = view;
        FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams(
                mAnchorVGroup.getWidth(),
                mAnchorVGroup.getHeight()
        );
        removeAllViews();

        controllerView = initView();
        mAnchorVGroup.addView(controllerView, frameParams);
    }

controller触摸事件的获取:目的是为了防止用户操作焦点在controller上时,controller不会消失。

//当触摸事件处于控制器上的时候,显示控制器,不让其消失
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        show(sDefaultTimeout);
        return false;
    }

    //当触摸事件处于控制器上的时候,显示控制器,不让其消失
    @Override
    public boolean onTrackballEvent(MotionEvent ev) {
        show(sDefaultTimeout);
        return false;
    }

    
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值