Launcher2如何实现Applications和Widgets的分页滑动

我的Launcher2的android版本是4.4.2的。我们知道进入allapps菜单界面滑动时,分为Applications和Widgets两部分,可以直接从Applications界面滑动到Widgets界面,现在我们要实现这两部分必须是相互独立的,可以分页滑动。

其实我们需要改动只是AppsCustomizePagedView.java这个类,该类继承与PagedView.java类

直接初始化一个boolean类型的变量mTabIndependent,在需要改动的地方加个if(mTabIndependent)或者if(!mTabIndependent)判断,并加入相应的代码就可以了

几乎每个地方的改动都需要加上如下代码:

if(mTabIndependent){

AppsCustomizeTabHost tabHost=getTabHost();

String tag=tabHost.getCurrentTabTag();

if(tag!=null){

if(tag.equals(tabHost.getTabTagForCurrentType(ContentType.Applications))){

......

}else if(tag.equals(tabHost.getTabTagForCurrentType(ContentType.Widgets))){

......

}

}

}

需要改动的方法有:
1.getMiddleComponentIndexOnCurrentPage
得到当前页码中的中间元素的序号
2.getPageForComponent
根据当前页的内容得到页码
3.setContentType
这个方法是设置当前的type类型,有Applications和Widgets两种
在进入AllApps时点击上面的Tab图标时会调用
这个方法里会调用invalidatePageData方法,invalidatePageData是pagedView类的方法,据我理解大致意思
是在切换时将之前的data清空,并将当前页码置为0
4.snapTopage,
当左右滑动屏幕时会调用,当点击Tab图标或者单击屏幕时pagedView类会调用它,并显示do nothing,因为
mUnboundedScrollX == newX
5.updateCurrentType
这个方法是在滑动屏幕时如果实现了applications和widgets的跳转就会调用它,此时改变tab,
其实我们需要做的就是禁用此方法
6.syncWidgetsPageItems
此方法用来加载Widgets里面的内容
7.syncPages
此方法用来循环加载页面(设置页面的尺寸,加载布局)
8.syncPageItems
此方法用来加载Applications和Widgets里面的内容
9.updateAppsUnreadChanged
更新未读取的应用数量,因为可能不是所有的application都被添加到了AppsCustomizePagedView,

我们应该同时更新apps info
10.update AppsUnread
更新未读取的有数据的application info的数量
11.reset
一个重置的方法,主要是切换tab时判断是否需要将之前的数据invalidate
12.getCurrentPageDecription
字面意思是得到当前页的描述 

由于代码很多,就不一一写出来了。只是把我的思路写在这里。按照这样改动,我最终实现了想要的效果。

页码标记从begin到last是从Applications到Widgets的
加载page和内容时都是同时的,Applications和Widgets没有区分
要做到想要的效果, 首先,页码必须分开,页码统计不可以从Applications到Widgets
  其次,可以先做到从Applications到Widgets滑动时,或者从Widgets到Applications滑动时
  上面的tab图标不变化,但显示的内容含有application和swidgets两种
  最后,将数据对应,也就是在tab必须和内容相一致

如果说的不对的地方,请大侠指点指点,谢谢。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值