首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android完善slidingmenu滑动按钮

2013-02-15 
android完美slidingmenu滑动按钮想实现类网易新闻的右滑出menu的那种效果(youTube也有那种效果),网上找了

android完美slidingmenu滑动按钮


想实现类似网易新闻的右滑出menu的那种效果(youTube也有那种效果),网上找了种种方法和代码例子,发现都达不到想要的效果。发现他们大部分方法,不是重写HorizontalScrollView, 就是重写SlidingDrawer。

其实想像一下那个交互的直实情况,完全不用绕圏子,原理就可以是将上面的一个View拨开,将下面的View显示出来而以。 不如自己重写一个基本布局.


demo下载


 先看一下做出来的效果吧,有人说没图说真相, 这个自己多嵌套了一层。(每滑完一层,右边就变灰,表示不可操作了)

android完善slidingmenu滑动按钮 右滑---------->android完善slidingmenu滑动按钮再右滑---------->android完善slidingmenu滑动按钮

 最大的特点是如果你要优化自己的代码成这个效果,代码改动量非常小,只需要调整一下布局,改改View的位置就可以了。甚至代码可以不用修改。


 下面看看实现过程

首先,两个View是可以重叠的。我们使用FrameLayout作为继承类。命名为ScrollDrawerView

这里要保证FrameLayout里有两个子View, 做很多事情先都要先检测一下。

final VelocityTracker velocityTracker = mVelocityTracker;velocityTracker.computeCurrentVelocity(500, mMaximumVelocity);int initialVelocity = (int) velocityTracker.getXVelocity(mActivePointerId);final int activePointerIndex = event.findPointerIndex(mActivePointerId);final int x = (int) event.getX(activePointerIndex);int xDiff = Math.abs(mInitialMotionX - x );if ((Math.abs(initialVelocity) > mDirectVelocity)) {//速度足够大,执行切换opener(initialVelocity > 0);} else if ((Math.abs(initialVelocity) > mMinimumVelocity) && (xDiff > mBottomView.getWidth() / 4)) {//速度不太大,但移动距离够长,也执行切换opener(initialVelocity > 0);}else {//按现在位置,不到一半就返回,到了一半就过去opener(mTopView.getLeft() >= mBottomView.getWidth()/2);}

根据速度,移动位置,最终位置三个条件来决定状态的开关, 这里很好理解了。

然后再用mScroller处理一下滑动的动画(关联函数opener, computeScroll)。

再处理一下滑开后使mTopView无效(关联函数setViewEnabled)。

再处理一下Layout后mTopView的复问问题(onLayout).再修理一下边边角角。

OK,搞定了,效果不错。还可以嵌套使用。可以延伸出很多有意思的效果来。


我比较懒很多东西也说不清楚。。上面只是一个大概思路。详细的看代码就OK了



1楼easyer2012昨天 09:10
怎么不弄张图出来看看效果,没图不直观,……
Re: jjyyhema昨天 09:42
回复easyer2012怎么弄,下载DEMO就可以了吧。

热点排行