最近研究视频播放器看到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