仿人人滑动式菜单

本文介绍了如何实现类似人人应用的滑动菜单效果。通过自定义ViewGroup类FlipperView,利用Scroller实现平滑移动动画。详细讲解了菜单的显示和隐藏方法,以及在Activity中添加手势检测以支持滑动打开和关闭菜单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近发现有好多软件都采用了滑动式菜单的效果,例如人人,云中书城等等。这种效果给人以耳目一新的感觉,所以自己也特别想实现一个。由于鄙人才疏学浅,属于菜鸟级的人物,第一次想到的当然是在网上找相关的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进行填充,滑动操作等等。

        奉上运行效果图:

      

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值