看到人人网的客户端,不管是ios还是android都有好看的侧边栏滑动的效果,点击上部的按钮可以滑动展开侧边的目录。觉得这个效果比较炫,所以研究了一下实现的方法。关于滑动,实现的思路大概有两种, 一种是利用ScrollView的滑动效果来做,另外一种就是直接使用Animation来作了。
1、使用ScrollView来实现
ScrollView的使用是规则是,当View的Size大于屏幕的边界的时候就可以滚动。实际上,ScrollView并不仅仅只能做这些事情,我们可以对它的属性进行一些设置,让它摇身一变成为我们想要的侧边栏:关掉Scroll Bar,去掉Edge的效果,这样ScrollView看起来就和普通的View没有太大的区别了,接下来的工作就是在ScrollView中填充两个View,一个是我们所需要的侧边栏,另一个就是程序的主内容了,当侧边栏出现的时候主内容要被挤到屏幕外面去。难点来了,这样的要求在layout文件中是定义不出来的。这里我们选择动态的生成这两个View并动态的根据屏幕的大小加载到ScrollView中去。
@Override public void onGlobalLayout() { parent.getViewTreeObserver().removeGlobalOnLayoutListener(this); w = scrollView.getMeasuredWidth(); h = scrollView.getMeasuredWidth(); LayoutInflater inlfater = LayoutInflater.from(parent.getContext()); app = inlfater.inflate(R.layout.slide_app, null); menu = inlfater.inflate(R.layout.slide_menu, null); parent.addView(menu, (int) (rate * w), h); parent.addView(app, w, h); }
通过这样 动态的加载我们可以想象此时View的状态应该是app和menu这两个View并排的出现在ScrollView中,这样我们只要控制ScrollVIew的滑动就可以控制在屏幕中显示的内容了。
@Override public void onClick(View v) { if (slideOut) { // hide the menu System.out.println("hide "); scrollView.smoothScrollBy((int) (-rate * w), 0); } else { // show menu System.out.println("show "); scrollView.smoothScrollBy((int) (rate * w), 0); } slideOut = !slideOut; }
好了,基本的效果已经实现了,但是LZ随后又发现了一个问题,就是表面上看到的ScrollView虽然是很正常的状态,但是不要忘了我们动态加载的View已经超过了屏幕的宽度,LZ尝试滑动屏幕发现居然是可以滑动的,这点肯定是不能接受的。LZ翻了一下API,找到一个WorkAround的方法,就是禁止ScrollView的touch事件,这样ScrollView就被阉割了不能接受用户的touch事件,自然就不能被滑动了。
到了这里,效果基本就实现了,但是LZ认为这样WorkAround的方式并不是很优雅,我们可以考虑另外一种实现方式。
2、使用动画来实现
Android提供动画的支持,我们可以快速的定义我们的动画,Android支持的动画中就包括滑动,那么这里我们可以把app和menu看作两个碟在一起的View,app遮盖menu。当我们要显示menu的时候只要把app用动画滑到指定的位置就可以了。
@Override public void onClick(View v) { final int w = app.getMeasuredWidth(); final int h = app.getMeasuredHeight(); Animation animation = null; if (slideOut) { // hide animation = new TranslateAnimation(0, -(w * rate), 0, 0); } else { // show animation = new TranslateAnimation(0, w * rate, 0, 0); } animation.setFillAfter(true); animation.setDuration(500); app.startAnimation(animation); }
启动应用发现滑动效果是出来了,但是LZ发现一个很有意思的问题,当menu被滑出来之后,再点击app上的button没有反应了,而点击app原来那个button的位置却可以触发注册的点击事件。这是为什么呢?原来animation只是引起了app的位移,app的大小没有变化,所以不会触发重新布局app,所以我们看到的app是被移动了,但是它原来的sub view还在原来的地方,这时我们要手动的让app来重新布局,调用app的layout方法。
@Override public void onAnimationEnd(Animation animation) { if (!slideOut) { app.layout((int) (w * rate), 0, (int) (w * rate + w), h); } else { app.layout(0, 0, w, h); } app.clearAnimation(); slideOut = !slideOut; }
这样,我们的视图就正常了。
实验了两种方法,LZ认为使用动画来实现要更加简单,上干货~需要的童鞋自行下载
相关推荐
Android侧边栏的实现方式多种多样,可以根据需求选择适合的设计方案。以下是对Android侧边栏实现的一些详细知识点的解释: 1. **DrawerLayout**: Android SDK中提供了`android.widget.DrawerLayout`组件,它是...
在Android应用开发中,侧边栏(Sidebar)通常被用作主界面的导航菜单,它可以从屏幕边缘滑出,提供用户便捷的操作入口。DrawLayout是实现这种效果的一种常见方式。本篇文章将深入探讨如何利用DrawLayout来创建一个...
在Android开发中,创建多级菜单和树形菜单是一项常见的任务,尤其在构建导航系统或者展示复杂层级数据时。美团网和大众点评网等应用就使用了这种布局,以提供用户友好的界面来探索和筛选服务。下面我们将深入探讨...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的高效性和可定制性使得它在各种...同时,这也是一次很好的机会去探索Android的自定义组件和事件处理机制,为未来的开发工作打下坚实的基础。
一个视图通常是主内容视图,始终可见,而另一个视图是侧边栏,只有在滑动时才会出现。这种布局非常适合创建类似Google Maps或许多应用的导航抽屉效果。 首先,我们需要在项目的`build.gradle`文件中添加对`...
1. **界面设计**:创建OneStep样式的界面,需要一个可以隐藏和显示的侧边栏。这通常涉及自定义布局和滑动手势的处理。你可以使用Android的SlidingPaneLayout或者自定义ViewGroup来实现。同时,为了实现拖放功能,你...
在Android应用开发中,SlideMenu是一种常见的设计模式,它允许用户通过从屏幕边缘滑动来显示隐藏的侧边栏,通常包含导航链接、设置选项或其他功能。这种效果为用户提供了一种直观且便捷的方式来探索和控制应用程序。...
在Android应用开发中,滑动菜单(Slide Menu)是一种常见的设计模式,用于提供侧边栏导航,让用户可以方便地访问应用程序的主要功能。本资源提供的"超炫android滑动菜单源码"是一个专为Android平台设计的高效、美观...
《Android Wearable 开发:深度探索与实践》 在当今智能设备领域,可穿戴设备已经逐渐成为技术发展的新宠,而Android Wearable平台为开发者提供了丰富的工具和接口,以实现创新的可穿戴应用。"wearable-support-...
这个主题我们将深入探讨Material Design中的两个关键组件:Toolbar和Palette,并结合侧边栏滑动效果,来实践如何在Android 5.0及更高版本中实现这些功能。 首先,我们来看**Toolbar**。它是Android对传统ActionBar...
这种设计通常用于实现侧边栏菜单、工具栏或者切换不同视图。在本讨论中,我们将深入探讨侧滑的概念、其在UI设计中的应用以及如何实现自定义侧滑菜单。 首先,侧滑菜单的设计初衷是为了优化有限屏幕空间的利用率,...
滑动菜单(SlidingMenu)是一种常见的Android应用设计模式,它允许用户通过向左或向右滑动主屏幕来访问隐藏的侧边栏菜单。在Android开发中,SlidingMenu库提供了一种简单的方式来实现这一功能,使得开发者可以快速...
"sliding-layer-lib-master"是一个基于Android平台的滑动层组件库,它允许开发者在应用中添加可滑动的侧边栏,通常用于实现类似Google Now那样的抽屉式菜单。这个库提供了丰富的定制选项,包括滑动方向、动画效果、...
它通常被用作Activity的布局,通过手势(通常是向左或向右滑动)显示一个侧边栏。这个侧边栏可以包含导航链接、设置选项或其他应用程序相关的功能。SlidingMenu库允许开发者自定义滑动的速度、敏感度以及菜单的显示...
这种效果通常用于侧边栏菜单,让用户可以通过从屏幕边缘向内滑动来打开或关闭菜单,提供了一种新颖的交互方式。在Android应用开发中,界面设计与用户体验至关重要,FlowingDrawerAndroid就是这样一种可以提升应用...
它通常与DrawerLayout一起使用,为用户提供一个可折叠的侧边栏,展示应用的主要导航选项。NavigationView可以自定义布局,允许开发者添加图标、文字等元素,通过设置`menu.xml`文件来定义菜单项。通过监听`...
DrawerLayout是Android开发中一个非常重要的组件,由Google官方提供,用于实现常见的侧边栏(Side Drawer)或称为抽屉式菜单效果。这种设计模式在许多应用中广泛使用,为用户提供了一个可隐藏的导航区域,通常包含...
在Android应用开发中,侧滑菜单(SlidingMenu)是一种常见的设计模式,它允许用户通过从屏幕边缘向内滑动来展示或隐藏一个侧边栏,通常包含导航选项或者设置。这种交互方式使得用户能够在不离开当前界面的情况下访问...
在Android应用开发中,侧滑菜单(SlidingMenu)是一种常见的设计模式,它允许用户通过从屏幕边缘向内滑动来展示或隐藏一个侧边栏菜单。这种菜单通常用于提供更多的导航选项或设置,而不会占据主屏幕的空间。在本案例...
它为用户提供了一个隐藏的侧边栏,用户可以通过从屏幕边缘向内滑动来显示或隐藏菜单,增强了应用的交互性和用户体验。本资料包主要涉及的是如何在Android应用中实现类似QQ设置面板的侧滑菜单布局。 首先,`...