最近我司android客户端准备要进行大版本升级,关于整个项目的框架问题不大,沿用我之前写的就行可以,关键这次UI风格进行的大的调整,主要是主页面的展示方式,看了下交互后发现和网易新闻的客户端基本一致(个人比较欣赏网易出的几款产品),利用了一天的时间弄了个大致的框架。
首先说下侧边栏的实现,这个利用google v4扩展包下的SlidingPanelLayout就可以轻松实现
而右边滑动的tab页也是利用google v4扩展包下的ViewPager也能轻松实现
当把这个两个空间结合在一起时,问题就来了,你发下你只能滑动侧边栏,右边的页面是划不动的,原因是2个viewgroup都有各自的手势拦截以及处理,这样会照成冲突。所以接下来的任务是将ViewPager和SlidingPanelLayout拷贝到自己的工程中修改他们的源代码ViewPager在Supprot V4 View下面,SlidingPanelLayout在Support V4 Widget下。
我会提供示例工程下载地址,接下来我说明几点关键的步骤
1.在SlidingPanelLayout的onInterceptTouchEvent中进行判断
final float x = ev.getX();
final float y = ev.getY();
final float adx = Math.abs(x - mInitialMotionX);
final float ady = Math.abs(y - mInitialMotionY);
final int slop = mDragHelper.getTouchSlop();
//如果用户在当前tab的第一位,并且他向左边滑动屏幕,这时的返回值为true
//这样viewpager就不会接收到任何的滑动事件
if(currentViewPagerIndex == 0 && adx > slop
&& adx > ady && x - lastInterceptMoveX > 0) {
interceptReturn = true;
} else if(adx > slop && ady > adx) {
mDragHelper.cancel();
mIsUnableToDrag = true;
interceptReturn = false;
}
lastInterceptMoveX = x;
2.在ViewPager中的onTouchEvent方法首行中添加
if(slidingPanelOpening) return false;
其中slidingPanelOpening表示当前侧边栏是否已经被打开,如果打开的话就直接返回不让viewpager进行手势操作
基本的关键就这两项,时间仓促就草草的做了简单的处理,如果有更好的意见欢迎交流.
下载地址:http://download.csdn.net/detail/songzeyang99/6593655