Android Dribbble风格边栏菜单实现(转)

转自:http://blog.csdn.net/t12x3456/article/details/17353049

随着IOS7的推出,大量移动应用也开始进行了重新设计.,开始应用大量的扁平化.可以说现在IOS和Android的风格设计方面确实是在逐渐地靠拢.

ReisdeMenu 创意灵感来自于Dribbble(Dribbble是一个面向创作家、艺术工作者、设计师等创意类作品的人群,提供作品在线服务,供网友在线查看已经完成的作品,或者正在创作的作品.).

得益于Dribbble,这种IOS7风格的侧边栏首先应用在IOS上得到了实现:

https://github.com/romaonthego/RESideMenu

我们首先看一下IOS上实现的效果

当然这里主要还是看一下在Android上如何来实现IOS风格的侧边栏,目前在github上也已经有相关的实现:

https://github.com/SpecialCyCi/AndroidResideMenu/blob/master

Android上的实现效果:

工程下载地址:

http://download.csdn.net/detail/t12x3456/6760669

如何把该开源项目集成到我们的项目中呢?让我们一步步地看:

1. ResideMenu工程选择Use as Library选项,在目标工程属性-->Android-->Add Library将该项目以库的形式引用.

2. 如果不愿意以Add Library方式引用,需要将ResideMenu工程中src目录下所有类,lis下的nineoldandroids-library-2.4.0.jar(Android 3.0动画的兼容版本,类似于ActionbarShelock,作者是同一人),以及所用到的所有资源图片和布局文件.

3. 这里涉及到的侧边栏样式可根据需求自行修改,在此不作详细描述.

4. ResideMenu 的使用:

对应的Activity的onCreate()声明周期中,构建不同的MenuItem并加入到ResideMenu中:

       // attach to current activity;
        resideMenu = new ResideMenu(this);
        resideMenu.setBackground(R.drawable.menu_background);
        resideMenu.attachToActivity(this);

        // create menu items;
        String titles[] = { "Home", "Profile", "Calendar", "Settings" };
        int icon[] = { R.drawable.icon_home, R.drawable.icon_profile, R.drawable.icon_calendar, R.drawable.icon_settings };
		// add menu items into residemenu
        for (int i = 0; i < titles.length; i++){
            ResideMenuItem item = new ResideMenuItem(this, icon[i], titles[i]);
            item.setOnClickListener(this);
            resideMenu.addMenuItem(item);
        }

打开/关闭菜单:

resideMenu.openMenu();
resideMenu.closeMenu();

监听菜单打开/关闭的事件:

resideMenu.setMenuListener(menuListener);
    private ResideMenu.OnMenuListener menuListener = new ResideMenu.OnMenuListener() {
        @Override
        public void openMenu() {
            Toast.makeText(mContext, "Menu is opened!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void closeMenu() {
            Toast.makeText(mContext, "Menu is closed!", Toast.LENGTH_SHORT).show();
        }
    };

如果想加入打开/关闭ResideMenu响应的手势支持,要在Activity中覆写dispatchTouchEvent():

@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        return resideMenu.onInterceptTouchEvent(ev) || super.dispatchTouchEvent(ev);
    }

这里有一点需要注意:有些情况下,用来打开或关闭菜单的手势,有可能和其他UI控件产生冲突,比如ViewPager

可以通过加入以下代码解决该问题:

通过addIgnoredView()方法,将可能会引起事件冲突的控件加入:

// add gesture operation‘s ignored views
   FrameLayout ignored_view = (FrameLayout) findViewById(R.id.ignored_view);
   resideMenu.addIgnoredView(ignored_view);     

具体又是如何避免冲突的呢?这里我们跟踪一下代码,这里是核心代码.

我们可以看到, 通过遍历所有可能有冲突的控件,判断当前MoveEvent的点是否在对应控件可视区域中,如果在该区域内,则返回true

 /**
     * if the motion evnent was relative to the view
     * which in ignored view list,return true;//
     *
     * @param ev
     * @return
     */
    private boolean isInIgnoredView(MotionEvent ev) {
        Rect rect = new Rect();
        for (View v : ignoredViews) {
            v.getGlobalVisibleRect(rect);
            if (rect.contains((int) ev.getX(), (int) ev.getY()))
                return true;
        }
        return false;
    }

然后在对应滑动或则触屏事件中处理,如onFling():

if(isInIgnoredView(motionEvent) || isInIgnoredView(motionEvent2)){
   return false;
 }

在会引起冲突的视图,如ViewPager范围内,用来打开或者关闭ResideMenu的滑动手势将不会生效.

同样,我们可以把这种解决方案应用应用到类似的场景中,防止控件之间的手势冲突.

目前就我了解,最新的友宝客户端就已经应用了此种特效. 相信在移动端发展迅速的大环境下,会不断地有新颖的设计,可以让用户有更好的体验.

Android Dribbble风格边栏菜单实现(转)

时间: 2024-08-01 12:49:13

Android Dribbble风格边栏菜单实现(转)的相关文章

Android界面编程——导航栏及菜单(六)

Android界面编程--导航栏及菜单 2.7导航栏及菜单 2.7.1  ActionBar ActionBar是Android3.0(API 11)开始增加的新特性,ActionBar出现在活动窗口的顶部,可以显示标题.icon.Actions按钮.可交互View,可实现应用程序级的导航,如图2.7-1所示 图2.7-1 其中 1. App icon: 主要用于展示App的Logo,如果当前界面不是一级界面,还可以展示返回航. 2.View Control: 用于切换不同的视图或者展示非交互信

Android Metro风格的Launcher开发系列第二篇

前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客Android Metro风格的Launcher开发系列第一篇写了如何配置Android开发环境,只是用文字和图片展示了开发Metro风格Launcher的初步设计和产品要求,这一篇文章将会从代码上讲解如何实现对应的UI效果,好了,评书开讲! Launcher主体框架实现: Launcher主体框架我选用的是大家所熟悉的ViewPager控件,因为ViewPager

CSS3超酷移动手机滑动隐藏側边栏菜单特效

这是一组共4种效果很炫酷的CSS3移动手机滑动隐藏側边栏菜单特效. 这四种效果各自是:默认的点击滑动側边栏菜单效果.带3D transforms的滑动側边栏效果.文字缩放和淡入淡出效果的滑动側边栏以及使用translate来实现滑动側边栏的效果. 每个滑动側边栏效果都带有从右到左淡入淡出的滑动过渡效果. 菜单条中的菜单项以一个接一个的方式显示,这样的效果是通过为它们分别加入 transition-delay 来实现的.以下来看看默认的滑动側边栏效果的制作方法. 插件中使用了font-awesom

Android Launcher 如何去掉主菜单,所有应用摆在桌面,类似小米桌面

今天蓝蓝设计想激励大家获得成就感和愉悦感,准备和你们分享我的珍贵宝藏. 这一组网站设计,定会帮助你克服你的UI设计创意空白档期! 戳开链接,挨个品鉴它们吧.如果你也想认识更多志同道合的朋友,可以尝试在评论留下你对某一个网站界面设计的观点哟! 更多飙升你创造力的网站设计欣赏http://www.lanlanwork.com/ 1.My lapka 2.Biamar 3.Plate the Slate 4.Bentrova 5.Arbol 6.Marc Labrie 7.Julian Perrett

仿苹果电脑任务栏菜单&amp;&amp;拼图小游戏&amp;&amp;模拟表单控件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

仿xp系统的任务栏菜单

主要代码 1.Designer.cs代码 namespace 仿XP系统的任务栏菜单 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary> /// <param n

【转载】Android Metro风格的Launcher开发系列第二篇

前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客Android Metro风格的Launcher开发系列第一篇写了如何配置Android开发环境,只是用文字和图片展示了开发Metro风格Launcher的初步设计和产品要求,这一篇文章将会从代码上讲解如何实现对应的UI效果,好了,评书开讲! Launcher主体框架实现: Launcher主体框架我选用的是大家所熟悉的ViewPager控件,因为ViewPager

【转】android创建Popwindow弹出菜单的两种方式

方法一的Activity [java] view plaincopy package com.app.test02; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import

Ionic Js十七:侧栏菜单

一个容器元素包含侧边菜单和主要内容.通过把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换. 效果图如下所示: ? ? 用法 要使用侧栏菜单,添加一个父元素,一个中间内容 ,和一个或更多 指令. <ion-side-menus> <!-- 中间内容 --> <ion-side-menu-content ng-controller="ContentController"> </ion-side-menu-content> &