Andrid仿网易新闻客户端首页滑动框架(ViewPager+SlidingPanelLayout)

最近我司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





  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值