MediaController的重写

本文介绍如何重写MediaController以适应遥控器操作,通过改变背景颜色突出显示焦点,并添加播放模式切换功能。内容包括重写MediaController的源码,注意super调用,设置MediaPlayer的重要性,以及布局和Activity的实现细节。
摘要由CSDN通过智能技术生成

最近研究视频播放器看到videoview比较便捷就使用了下,但是我的需求不是触控而是遥控,所以获取焦点后要让其背景变色以便于查看焦点位置,所以要重写他的mediacontroller样式,查找资料百度后都介意用mediaplayer与surfaceview代替videoview比较好,但是我这人就懒的,既然有了完整的就不想再重新研究其他的。

public class MyMediaController extends MediaController {
    private static final String TAG="MyMediaController";
    private MediaPlayerControl mPlayer;
    private Context mContext;
    private View mRoot;
    private View mAnchor;
    private ProgressBar mProgress;
    private TextView mEndTime, mCurrentTime;
    private boolean mDragging;
    private boolean mShowing;
    private static final int sDefaultTimeout = 3000;
    private static final int FADE_OUT = 1;
    private static final int SHOW_PROGRESS = 2;
    private boolean mFromXml;
    private OnClickListener mNextListener, mPrevListener;
    StringBuilder mFormatBuilder;
    Formatter mFormatter;
    private ImageButton mPauseButton;
    private ImageButton mNextButton;
    private ImageButton mPrevButton;
    private ImageButton mModeButton;

    public static final int MODE_LOOP=0;
    public static final int MODE_RANDOM=1;
    public static final int MODE_LIST=2;

    private int mode=0;

    public MyMediaController(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        mFromXml = true;
    }
//在这里设置是否使用FastForward而不是Next;useFastForward=false时使用
// Next/Prevouse按钮所以我们在实例化MediaControl是调用这个构造函数,并且 useFastForward=false×/
    public MyMediaController(Context context, boolean useFastForward) {
        super(context);
        mContext = context;
    }

    public MyMediaController(Context context) {
        super(context);
        mContext = context;
    }

    public void setMode(int mode){
        this.mode=mode;
        updateModePlay();
    }

    public int getMode(){
        return mode;
    }

    @Override
    public void setMediaPlayer(MediaPlayerControl player) {
        super.setMediaPlayer(player);
        mPlayer = player;
        updatePausePlay();
    }

    public void setAnchorView(View view) {
        super.setAnchorView(view);
        mAnchor=view;
        LayoutParams frameParams = new LayoutParams(
                ViewGroup.LayoutParams.FILL_PARENT,
                ViewGroup.LayoutParams.FILL_PARENT);

        removeAllViews();
        View v = makeControllerView();
        addView(v, frameParams);
    }


    protected View makeControllerView() {
        LayoutInflater inflate = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mRoot = inflate.inflate(R.layout.mymedia_controller,
                null);

        initControllerView(mRoot);

        return mRoot;
    }

    private void initControllerView(View v) {
        mPauseButton = (ImageButton) v
                .findViewById(R.id.pause);
        if (mPauseButton != null) {
            mPauseButton.requestFocus();
            mPauseButton.setOnClickListener(mPauseListener);
        }

        mNextButton = (ImageButton) v
                .findViewById(R.id.next);
        mPrevButton = (ImageButton) v
                .findViewById(R.id.prev);

        mModeButton=(ImageButton) v
                .findViewById(R.id.mode);
        if (mModeButton != null) {
            mModeButton.requestFocus();
            mModeButton.setOnClickListener(mModeListener);
        }

        mProgress = (ProgressBar) v
                .findViewById(R.id.mediacontroller_progress);
        if (mProgress != null) {
            if (mProgress instanceof Seek
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值