音乐播放器-MainFragment分析3

该fragment里面一共有4个manager:ServiceManger,MainBottomUIManager,SlidingDrawerManager,UIManager还有一个timer:MusicTimer

ServiceManager已经在上一篇中讲述过,下面先讲MainBottomUIManager,里面有一个handler,是public的,也就是说会被外界持有该handler的引用

MainBottomUIManager里面供外界调用的方法主要有2个refreshUI和showPlay,里面的控件除了AlwaysMarqueeTextView都是基本控件,AlwaysMarqueeTextView控件只是重写了isFocus()方法。

mhandler:

mHandler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				refreshSeekProgress(mServiceManager.position(),
						mServiceManager.duration());
			}
		};

从这里可以看出msg并没有什么毛用,但每次都要refreshSeekProgress,参数是从mServiceManager的public方法中传过来的。

简单来讲就是更新音乐播放的进度条。音乐在播放的时候进度条是频繁更新的。

里面的position()和duration()的方法定义是在com.ldw.music.service.MediaService里面定义的(在上一篇MainFragment2里面解释过),以下是方法定义:

@Override
		public int duration() throws RemoteException {
			return mMc.duration();
		}

		@Override
		public int position() throws RemoteException {
			return mMc.position();
		}

以下是seekprogress的布局文件定义,从里面可以知道max=“100”

 <ProgressBar
        android:id="@+id/playback_seekbar2"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/bottomLayout"
        android:max="100"
        android:maxHeight="2.0dip"
        android:minHeight="2.0dip"
        android:progressDrawable="@drawable/playback_seekbar2" />

refreshSeekProgress()的工作方式可以知道它传入的参数是为了获取一个比例最后和100相乘获取progress的值,同时更新mPositionTv(音乐播放时间)。

refreshUI方法,更新所有的BottomUI,包括2个AlwaysMarqueeTextView,2个TextView,一个Imageview的headIcon

showPlay方法,控制是播放的button还是暂停的button,传入的boolean类型的值,设置gone还是visible

public void showPlay(boolean flag) {
		if (flag) {
			mPlayBtn.setVisibility(View.VISIBLE);
			mPauseBtn.setVisibility(View.GONE);
		} else {
			mPlayBtn.setVisibility(View.GONE);
			mPauseBtn.setVisibility(View.VISIBLE);
		}
	}

注意:play和pause在同一个位置,通过framelayout或者relativelayout(没有相对位置的时候就是一个摞着一个)都可以实现。

onClick方法里面设置4个监听事件,2个控制播放和暂停,1个控制下一首,都是通过serviceManger控制的,另一个控制显示slidingmenu。要调用主activity的成员变量mSlidingMenu的方法。






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值