Android Reside Menu
https://github.com/SpecialCyCi/AndroidResideMenu
#AndroidResideMenu
中文说明请点击 这里
The idea of ResideMenu is from Dribble 1 and 2. It has come true and run in iOS devices. iOS ResideMenu
This project is the RefsideMenu Android version. The visual effect is partly referred to iOS version of ResideMenu.
And thanks to the authors for the above idea and contribution.
Now with 3D support
DEMO
This copy is the demo.
Version Migration
Upgrading to v1.4
from v1.3
, v1.2
, v1.1
, v1.0
Duplicate the followed code in dispatchTouchEvent() of Activity, replace the old dispatchTouchEvent()
code.
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return resideMenu.dispatchTouchEvent(ev);
}
Requirements
Run in Android 2.3 +
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
compile 'com.specyci:residemenu:1.6+'
}
Other
- import ResideMenu project to your workspace.
- make it as a dependency library project to your main project.
( see example )
or
If you want to merge ResideMenu with your project, you should follow these steps.
- Copy all files from src/com/special/ResideMenu to your project.
- Copy libs/nineoldandroids-library-2.4.0.jar to your project’s corresponding path: libs/
- Copy res/drawable-hdpi/shadow.9.png to your project’s corresponding path: res/drawable-hdpi/
- Copy res/layout/residemenu.xml and residemenu_item.xml to your project’s corresponding path: res/layout
Usage
init ResideMenu: write these code in Activity onCreate()
// 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 };
for (int i = 0; i < titles.length; i++){
ResideMenuItem item = new ResideMenuItem(this, icon[i], titles[i]);
item.setOnClickListener(this);
resideMenu.addMenuItem(item, ResideMenu.DIRECTION_LEFT); // or ResideMenu.DIRECTION_RIGHT
}
If you want to use slipping gesture to operate(lock/unlock) the menu, override this code in Acitivity dispatchTouchEvent() (please duplicate the followed code in dispatchTouchEvent() of Activity.
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return resideMenu.dispatchTouchEvent(ev);
}
On some occasions, the slipping gesture function for locking/unlocking menu, may have conflicts with your widgets, such as viewpager. By then you can add the viewpager to ignored view, please refer to next chapter – Ignored Views.
open/close menu
resideMenu.openMenu(ResideMenu.DIRECTION_LEFT); // or ResideMenu.DIRECTION_RIGHT
resideMenu.closeMenu();
listen in the menu state
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();
}
};
disable a swipe direction
resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_RIGHT);
Custom Usage
Do your reside menu configurations, by creating an instance of ResideMenu with your custom layout’s resource Ids. If you want to use default layout, just pass that variable as -1.
resideMenu = new ResideMenu(activity, R.layout.menu_left, R.layout.menu_right);
resideMenu.setBackground(R.drawable.menu_background);
resideMenu.attachToActivity(activity);
resideMenu.setScaleValue(0.5f);
resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_RIGHT);
resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_LEFT);
As your configuration’s completed, now you can customize side menus by getting instances of them as following:
View leftMenu = resideMenu.getLeftMenuView();
// TODO: Do whatever you need to with leftMenu
View rightMenu = resideMenu.getRightMenuView();
// TODO: Do whatever you need to with rightMenu
##Ignored Views
On some occasions, the slipping gesture function for locking/unlocking menu, may have conflicts with your widgets such as viewpager.By then you can add the viewpager to ignored view.
// add gesture operation's ignored views
FrameLayout ignored_view = (FrameLayout) findViewById(R.id.ignored_view);
resideMenu.addIgnoredView(ignored_view);
So that in ignored view’s workplace, the slipping gesture will not be allowed to operate menu.
##About me
A student from SCAU China.
Email: specialcyci#gmail.com