Android 滑动菜单(Sliding Menu)实现分析


一、Sliding Menu 效果图


以下是截取自Evernote Android应用


                             

                        图 1                                                                                                      图2


二、实现分析

1. 整体布局:怎样包括上面两个视图,移开图1中的视图还要能显示出图2左侧的视图?

   目前我能想到的有三种:

SlidingDrawer 支持抽屉效果使用并不灵活,不能灵活修改成想要的效果,所以从RelativeLayout其他效果自定义。 
RelativeLayout  使用过此布局的肯定有印象,如果仅填充两个子视图,未添加布局属性两个子视图会叠加显示在左上角。
ViewGroup               

所有布局类的父类,ViewGroup中所有的视图应该放置什么位置都可以控制,所以只需简单覆写onMeasure,onLayout可以不用RelativeLayout,因为其中其他属性都用不到。



2. 手动滚动:如果手指在图1中向右滑动,滑到最右侧可以显示图2的效果,反之显示图1。如何控制视图随手指一动?

     目前我能想到的有三种方式:ViewFlipper、View.layout、View.mScrollX, View.mScrollY

ViewFlipper Android提供的控件,支持左右滑动效果,但是滑动过程中不能停止。
View.layout 修改View.x, View.y 修改控件显示位置达到滚动效果。
View.mScrollX, View.mScrollY

 最好的选择,Android自身为了支持滚动添加的变量,使用scrollTo控制。mScrollY的改变会造成滚动效果,

且仅重新执行onDraw而onMeasure,onLayout不用重复执行,提高滚动效率。

《从源码分析ScrollBy和ScrollTo仅执行onDraw方法》 PS此篇文章还没分析完,

不过可以通过当mScrollX,mScrollY值改变时在onMeasure, onLayout,

onDraw中打印log来查看这种说法是否正确。



3. 自动滚动: 手指在图1上向右滑动,滑动到中途松开手指,图1要自动滚动到图2的效果,反之亦然。如何实现自动滚动呢?

        目前我能想到的有三种方式:

ViewFlipper 如果是使用ViewFlipper自身控件就支持自动滚动效果,但是中途不能自由停止。
Animation 可以实现自动滚动,但是限制于上面一样。
View.mScrollY + Runnable 之前写过这样的实现文章

4. 点击事件:  图1中既要支持横向向右滑动,显示出图2,还需要总想滑动显示下面的内容,如何避免横向纵向滑动冲突?

需要实现效果描述:

1. 在图2中点击‘笔记’,‘笔记本’会自动移动到图1样式并显示相应内容。

2. 在图2中点击最右侧的边角,可以移动到图1样式。? 此处点击事件如何在图1中拦截并且不是点击图1的相应View?

3. 在图2中在最右侧可以支持想左滑动。



三、代码实现记录

《Android 滑动侧边栏(Sliding Menu)第一种实现 - 1 手动滚动+自动滚动》

《Android 滑动侧边栏(Sliding Menu)第一种实现 - 2 手动滚动+自动滚动 + 事件处理》

《Android 滑动侧边栏(Sliding Menu)第二种实现方式1》


原文地址:http://blog.csdn.net/love_world_/article/details/8635702



你可能感兴趣的:(Android,UI)