背景:项目中应用到边菜单栏,开源项目SlidingMenu有点大,项目中用不到这么多东东.
功能:可以在上下左右四个方向上显示侧边栏
效果图(就截一个图,其它图放上去太多了,不太好):
关键性代码:
a.初始化时位置处理
/**
* 左边栏的属性初始化
*/
protected void menuLeftProperties() {
M_LAYOUT_POSITION = ISMENU_OPEN ? 0 : -MENU_WIDTH;
//当打开时,右边的移动。理解:保持画布不动,视图区移动
M_SLIDER_MAX_OPEN = ISMENU_OPEN ? 0 : -MENU_WIDTH;
//当移动时左边的移动
M_SLIDER_MAX_CLOSE = ISMENU_OPEN ? MENU_WIDTH : 0 ;
//偏移位置
mMovePosition = ISMENU_OPEN ? 0 : -MENU_WIDTH;
}
/**
* 右边栏的属性初始化
*/
protected void menuRightProperties() {
M_LAYOUT_POSITION = ISMENU_OPEN ? -MENU_WIDTH : 0;
//打开时
M_SLIDER_MAX_OPEN = ISMENU_OPEN ? 0 : MENU_WIDTH;
//关闭时
M_SLIDER_MAX_CLOSE = ISMENU_OPEN ? -MENU_WIDTH : 0;
//偏移位置
mMovePosition = ISMENU_OPEN ? 0 : MENU_WIDTH;
}
b.消息是否拦截
/**
* 判断是否需要处理事件
*
* @param ev
* @return
*/
protected boolean isInterceptTouchEvent(MotionEvent ev) {
boolean isIntercept = false;
switch (MENU_POSITION) {
case LEFT:
isIntercept = isInterceptMenuLeftTouchEvent(ev);
break;
case RIGHT:
isIntercept = isInterceptMenuRightTouchEvent(ev);
break;
case TOP:
isIntercept = isInterceptMenuTopTouchEvent(ev);
break;
case BOTTOM:
isIntercept = isInterceptMenuBottomTouchEvent(ev);
break;
}
return isIntercept;
}
/**
* 边栏左边是否要处理
* @param ev
* @return
*/
protected boolean isInterceptMenuLeftTouchEvent(MotionEvent ev) {
//是左右滑动
boolean isIntercept = Math.abs(ev.getY() - MOTIONEVENT_Y) <= Math.abs(ev.getX() - MOTIONEVENT_X);
return isIntercept && ((MOTIONEVENT_X >= 0 && MOTIONEVENT_X <= TOUCH_OPEN_MENU_DISTANCE
&& !ISMENU_OPEN && (ev.getX() - MOTIONEVENT_X) > 0)
|| (ev.getX() - MOTIONEVENT_X < 0 && ISMENU_OPEN));
}
c.菜单栏的移动
/**
* 当Menu菜单在左边时
* @param event
*/
protected void menuLeftMoveEvent(MotionEvent event) {
float distance = event.getX() - MOTIONEVENT_X;
//向右滑动,打开菜单栏
if(distance > 0) {
if(distance + mMovePosition >= 0) {
ISMENU_OPEN = true;
mMovePosition = 0;
smoothScrollTo(M_SLIDER_MAX_OPEN, 0);
return ;
}else {
mMovePosition += distance;
}
}else if(distance < 0) {
if(distance + mMovePosition <= -MENU_WIDTH) {
ISMENU_OPEN = false;
mMovePosition = -MENU_WIDTH;
smoothScrollTo(M_SLIDER_MAX_CLOSE, 0);
return ;
}else {
mMovePosition += distance;
}
}
smoothScrollBy((int) - distance, 0);
MOTIONEVENT_X = event.getX();
}
其它一些代码都做过相应的注释 整个工程在附件中.
分享到:
相关推荐
在Android应用开发中,侧边栏(Sidebar)通常被称为滑动菜单或抽屉式导航,是许多现代应用程序的标准设计元素。它提供了一种简洁的方式来展示应用程序的主要导航选项,让用户能够轻松地在不同的功能模块之间切换。侧...
Android仿美团外卖菜单界面是Android开发中一个常见的界面,主要用于展示菜单信息。它通常由左侧菜单类别列表和右侧菜单详情列表组成。本文将详细介绍Android仿美团外卖菜单界面的实现过程。 一、布局文件 ...
在Android应用开发中,侧边栏(Sidebar)通常被用作一种导航机制,它可以从屏幕边缘滑出,显示菜单、设置或者其他操作选项。本教程将详细介绍如何通过手势检测来实现这种效果,创建一个类似TestSideShowApp的应用。 ...
`DrawerLayout`是Android SDK中的一个布局组件,它可以创建一个可滑动的侧边栏,通常用于实现滑动菜单。通过设置`DrawerLayout`的子视图,可以轻松地添加内容区域和抽屉菜单。 2. 第三方库:`SlidingPaneLayout`, ...
在Android应用开发中,左右侧滑菜单是一种常见的交互设计,它允许用户通过在屏幕边缘向左或向右滑动来展示或隐藏一个侧边栏,通常包含导航链接、设置选项等。这种菜单模式广泛应用于各种应用程序,如社交媒体、新闻...
3. RecyclerView:在侧边栏菜单中,通常使用RecyclerView来展示一系列可点击的条目,因为它的高效性能和自定义布局能力。 二、源码解析 1. MainActivity:这是主Activity,包含了DrawerLayout的初始化和监听器设置...
本项目“Android-双方向的列表侧边顶部菜单不变其他实现双向滚动”旨在实现一个特殊的RecyclerView布局,即在用户滚动时,头部标题和侧边栏标题始终保持固定,而其他内容可以进行上下和左右的滚动。 一、...
SindMenu是一款轻量级的安卓组件,它允许用户通过简单的手势操作(如左右滑动)来展示或隐藏侧边栏菜单。这种设计模式在移动应用中非常常见,可以为用户提供直观的导航体验,尤其适合内容丰富的应用程序。 二、功能...
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_activated_1, menuItems); drawerList.setAdapter(adapter); ``` 3. 添加监听器来处理抽屉的打开和关闭: ```...
List<TextView> textViewList = new ArrayList<>(); List<View> viewList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...
Android侧滑菜单控件DrawerLayout是Android V4包下一个带有侧滑功能的布局控件,可以根据手势展开与隐藏侧边栏,也可以随着侧边栏的点击改变主界面区的内容。DrawerLayout的使用可以分为三个部分:主界面内容布局、...
Xamarin.Android 中使用 Fragment 实现底部菜单的详细解析 在本篇文章中,我们将详细介绍如何使用 Xamarin.Android 中的 Fragment 实现底部菜单的开发。通过本篇文章,读者将了解到 Fragment 的基本概念、实现底部...
`SlidingPaneLayout`是Android Support Library中的一个布局管理器,属于`v4`库,它的主要作用是提供左右滑动的功能,可以将一个大视图(通常是主内容视图)与一个小视图(如侧边栏)结合在一起。当屏幕宽度足够时,...
要使用`Actionbar`,首先需要在`AndroidManifest.xml`中的`<application>`或`<activity>`标签下添加`android:theme`属性,指定一个包含`Actionbar`主题的样式,如`Theme.AppCompat`。 在活动中,可以通过继承`...
3. 滑动菜单:在屏幕边缘滑动以显示或隐藏侧边栏菜单。 4. 播放器应用:左右滑动快进或后退。 总结,"界面手势左右滑动效果"是提升移动应用交互性的重要技术,通过合理利用系统提供的手势识别API,开发者可以创建出...
Android SlideMenu 是一款能够帮助开发者快速实现类似QQ侧滑效果的库,使得用户可以在主界面边缘滑动,展示隐藏的侧边栏菜单,从而提供更多的功能选项。本文将深入探讨Android SlideMenu的实现原理、使用方法以及在...
在Android和iOS平台上,滑动菜单通常用于实现导航栏或者侧边栏功能,为用户提供更多的操作路径。在本文中,我们将深入探讨滑动菜单的实现原理、常见问题及如何修复这些问题。 一、滑动菜单的基本实现 1. Android中...
在Android开发中,滑动菜单(SlidingMenu)是一种常见的交互模式,它允许用户通过从屏幕边缘向内滑动来显示或隐藏侧边栏,通常用于实现导航或者设置等功能。本篇文章将深入探讨开源项目`SlidingMenu-master`,解析其...
使用Fragment需要在布局XML中添加`<fragment>`标签,或者在代码中使用`FragmentManager`和`FragmentTransaction`进行动态添加、替换和移除操作。 三、视图绘制流程 Android视图的绘制过程主要涉及`onDraw()`方法,...