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

本文介绍了如何在Android项目中使用自定义的MediaController与MediaPlayer结合,通过实现MediaControllerInterface和MediaControl接口,实现视频播放界面的定制。详细步骤包括定义接口、创建自定义控制器以及在播放界面中实现MediaControl接口。
摘要由CSDN通过智能技术生成

项目中需要做一个视频播放模块,大体是用的七牛播放器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
    评论
### 回答1: MediaController是Android中的一个媒体控制器类,可以用于控制视频播放器的播放、暂停等操作。要实现播放下一个视频的功能,可以按照以下步骤进行: 1. 首先,需要获得当前正在播放的视频的信息,包括视频的URL或本地路径等。可以通过调用MediaPlayer的getCurrentPosition()方法获取当前视频的播放位置,并结合视频列表的索引来确定下一个视频的位置。 2. 接下来,需要根据下一个视频的位置,更新播放器的资源。可以通过调用MediaPlayer的setDataSource()方法,传入下一个视频的URL或本地路径来更新媒体资源。 3. 然后,重新准备播放器以加载下一个视频。可以调用MediaPlayer的prepare()方法来准备播放器。 4. 最后,启动媒体控制器来播放下一个视频。可以调用MediaController的start()方法来开始播放。 需要注意的是,以上步骤仅适用于使用MediaPlayerMediaController进行视频播放的情况。如果使用其他视频播放库或自定义实现视频播放器,可能需要针对具体的实现进行相应的调整。 此外,为了良好的用户体验,还可以在切换视频时增加过渡效果,例如淡入淡出效果或切换动画等,以避免突兀的切换。这可以通过使用动画效果或过渡动画来实现。 总之,通过获取当前视频信息、更新媒体资源、重新准备播放器和启动媒体控制器,即可实现MediaController播放下一个视频的功能。 ### 回答2: 要让MediaController实现播放下一个视频,可以采取以下步骤: 1. 首先,确认MediaController已经与MediaPlayer或其他视频播放组件(如VideoView)关联。这可以通过调用setMediaPlayer()或setAnchorView()方法来实现。 2. 接下来,需要获取视频列表或播放队列,以确保有可用的下一个视频。可以通过创建一个包含视频URL或其他ID的列表来实现。如果使用VideoView,可以使用setVideoPath()方法设置视频路径。 3. 当需要切换到下一个视频时,可以通过监听MediaController的一些回调方法来触发。其中最常用的是实现MediaController.MediaPlayerControl接口中的onCompletion()方法。当当前视频播放完成时,onCompletion()方法将被调用。在这个方法中,可以执行逻辑来切换到下一个视频。 4. 在onCompletion()方法中,可以使用MediaPlayerVideoView的相关方法来进行切换。比如,可以使用setVideoURI()方法设置下一个视频的URI,然后调用start()方法来开始播放下一个视频。 需要注意的是,实现这个功能也取决于所使用的视频播放组件和播放库的特定实现。在一些情况下,可能需要使用其他的方法或回调来实现播放下一个视频的功能。因此,具体实现步骤可能会因播放器库的不同而有所变化。 ### 回答3: 要使用MediaController播放下一个视频,您可以按照以下步骤进行操作: 1. 首先,确保您已经初始化了MediaPlayer对象,并且已经设置了正确的数据源和准备完成的监听器。 2. 创建一个MediaController对象,并将其与MediaPlayer对象进行绑定。这可以通过调用MediaPlayer对象的setMediaController()方法实现。 3. 在MediaController中,您可以添加一个监听器来监听下一个按钮的点击事件。例如,您可以使用setPrevNextListeners()方法来设置这个监听器。 4. 在监听器中,当下一个按钮被点击时,您可以调用MediaPlayer对象的seekTo()方法将播放位置设置为0,即播放下一个视频。例如,您可以使用seekTo()方法来实现这一功能。 5. 最后,调用MediaController对象的show()方法来显示控制器,以便用户可以看到和操作它。 通过这些步骤,您就可以使用MediaController播放下一个视频了。当用户点击下一个按钮时,视频播放器将播放列表中的下一个视频。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值