创新源于模仿之三:实现左右两个屏幕的切换 – SHARE & TOP – 博客频道 – CSDN.NET
今天第三篇,模仿UCWEB的首页,做一个可以左右滑动的双屏。
其实要实现这个效果在Android中并非难事,因为官方的Launcher已经有现成的源代码放在那儿了,就是那个Workspace.java。大家可以去http://android.git.kernel.org/ 下载。
而我们要做的事情就是分析它并精简它(毕竟我们只是打算左右滑动罢了,并不需要能创建快捷方式文件夹之类的东西,更不需要在上面拖放图标)。
因此,不管是Drop还是Drag,统统不需要了:
同时,把那些个接口所要求实现的方法,以及那些与Drag/Drop相关的成员变量都去掉吧。
看看我精简后剩下什么成员变量:
以上足矣。
然后在Eclipse中会有大量的错误,没关系,删吧。
addView 是用来在代码中添加新的子view的方法,不需要,我们只需要在layout xml中直接指定就好了。
getOpenFolder/getOpenFolders 文件夹相关的,当然不需要了。
addInCurrentScreen/addWidget 都没什么用处了,可以删掉。
与Cell相关的那些也可以删掉。
因为我们的代码不能直接访问mScrollX,所以需要换成getScrollX()。这一点是需要特别注意的。
看看我精简后都剩下些什么方法:
最后只要不报错,就OK了。
我们来分析一下几个关键的方法,其一是 onTouchEvent:
其二 snapToDestination和snapToScreen:
其三 computeScroll,让Workspace滚动到合适的位置:
基本上就是这些了,其它方法都是辅助的,很好理解。
其实有一个问题,我们发现UCWeb主页下面有三个点指示当前所处的位置,这个指示器我的想法是可以放在Workspace外面来做,利用Workspace当前的mCurrentScreen值显示出当前正处于哪个屏。
给出我的layout xml描述:
就这样了。这个分页指示器就留给你自己去发挥了。