最近发现有好多软件都采用了滑动式菜单的效果,例如人人,云中书城等等。这种效果给人以耳目一新的感觉,所以自己也特别想实现一个。由于鄙人才疏学浅,属于菜鸟级的人物,第一次想到的当然是在网上找相关的demo。百度过来谷歌过去,发现相关的demo少的可怜,只找到一个某位大牛jfeinstein10写的SlidingMenu库。欣喜之余,下载下来看看,发现真心麻烦啊,于是下定决心自己写一个。
实现SlidingMenu的方法如下:
自定义ViewGroup类ViewFlipper如下:
ViewFlipper中包含有两个子布局,一个子布局是menu布局,另一个子布局是主要显示内容布局。在ViewFlipper的onLayout函数中,对这两个子布局进行布局。显示菜单和隐藏菜单是有两个函数实现,分别是
这两个函数都用到了ViewGroup中负责移动子视图的Scroller类。通过调用函数
来实现菜单移动的动画效果。这个函数里面的四个参数比较令人费解,仔细琢磨解释一下,如果理解不对,也请各位大牛指正。
startX:在水平方向上,已经滚动的距离。
startY:在竖直方向上,已经滚动的距离。
dx:在水平方向需要滚动的总距离,注意是总距离,包括已经滚动的距离。
dy:在竖直方向上需要滚动的总距离。
这样,自定义的ViewGroup类ViewFlipper就完成了。接下来就要填写内容,包括菜单和主页面了。
菜单menu.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200.0dip"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@color/dark_blue">
<Button
android:id="@+id/close"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="关闭菜单"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是菜单"
android:textSize="20.0sp"
android:textColor="#ff000000"
android:layout_gravity="center"/>
</LinearLayout>
主页面content.xml如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@color/mibai">
<Button
android:id="@+id/open"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="打开菜单"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是内容"
android:textSize="20.0sp"
android:textColor="#ff000000"
android:layout_gravity="center"/>
</LinearLayout>
在SlidingMenuActivity的内容描述文件main.xml中做如下定义:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<knlnzhao.slidingmenu.FlipperView
android:id="@+id/flipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
在启动的Activity中做如下代码:
主要包括对FlipperView进行填充,滑动操作等等。
奉上运行效果图: