diff --git a/3Dsupport.png b/3Dsupport.png new file mode 100644 index 0000000..7086057 Binary files /dev/null and b/3Dsupport.png differ diff --git a/README.md b/README.md index ca6c8b9..e1c1461 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ And thanks to the authors for the above idea and contribution. +Now with 3D support ! + ## DEMO This copy is the demo. @@ -110,6 +112,29 @@ 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. + +```java + 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: + +```java + 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. ```java diff --git a/ResideMenu/res/layout/residemenu.xml b/ResideMenu/res/layout/residemenu.xml deleted file mode 100644 index 501315b..0000000 --- a/ResideMenu/res/layout/residemenu.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ResideMenu/res/layout/residemenu_custom.xml b/ResideMenu/res/layout/residemenu_custom.xml new file mode 100755 index 0000000..bdfa53b --- /dev/null +++ b/ResideMenu/res/layout/residemenu_custom.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/ResideMenu/res/layout/residemenu_custom_left_scrollview.xml b/ResideMenu/res/layout/residemenu_custom_left_scrollview.xml new file mode 100755 index 0000000..0d31a0b --- /dev/null +++ b/ResideMenu/res/layout/residemenu_custom_left_scrollview.xml @@ -0,0 +1,23 @@ + + + + + + + + + + \ No newline at end of file diff --git a/ResideMenu/res/layout/residemenu_custom_right_scrollview.xml b/ResideMenu/res/layout/residemenu_custom_right_scrollview.xml new file mode 100755 index 0000000..2816f54 --- /dev/null +++ b/ResideMenu/res/layout/residemenu_custom_right_scrollview.xml @@ -0,0 +1,24 @@ + + + + + + + + + + \ No newline at end of file diff --git a/ResideMenu/src/com/special/ResideMenu/ResideMenu.java b/ResideMenu/src/com/special/ResideMenu/ResideMenu.java index f7d7de0..88ab905 100644 --- a/ResideMenu/src/com/special/ResideMenu/ResideMenu.java +++ b/ResideMenu/src/com/special/ResideMenu/ResideMenu.java @@ -3,14 +3,14 @@ import android.app.Activity; import android.content.Context; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.Rect; +import android.os.Build; import android.util.DisplayMetrics; import android.view.*; import android.view.animation.AnimationUtils; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ScrollView; +import android.widget.*; + import com.nineoldandroids.animation.Animator; import com.nineoldandroids.animation.AnimatorSet; import com.nineoldandroids.animation.ObjectAnimator; @@ -25,10 +25,10 @@ * Time: 下午10:44 * Mail: specialcyci@gmail.com */ -public class ResideMenu extends FrameLayout{ +public class ResideMenu extends FrameLayout { - public static final int DIRECTION_LEFT = 0; - public static final int DIRECTION_RIGHT = 1; + public static final int DIRECTION_LEFT = 0; + public static final int DIRECTION_RIGHT = 1; private static final int PRESSED_MOVE_HORIZONTAL = 2; private static final int PRESSED_DOWN = 3; private static final int PRESSED_DONE = 4; @@ -38,19 +38,27 @@ public class ResideMenu extends FrameLayout{ private ImageView imageViewBackground; private LinearLayout layoutLeftMenu; private LinearLayout layoutRightMenu; - private ScrollView scrollViewLeftMenu; - private ScrollView scrollViewRightMenu; - private ScrollView scrollViewMenu; - /** Current attaching activity. */ + private View scrollViewLeftMenu; + private View scrollViewRightMenu; + private View scrollViewMenu; + /** + * Current attaching activity. + */ private Activity activity; - /** The DecorView of current activity. */ + /** + * The DecorView of current activity. + */ private ViewGroup viewDecor; private TouchDisableView viewActivity; - /** The flag of menu opening status. */ - private boolean isOpened; + /** + * The flag of menu opening status. + */ + private boolean isOpened; private float shadowAdjustScaleX; private float shadowAdjustScaleY; - /** Views which need stop to intercept touch events. */ + /** + * Views which need stop to intercept touch events. + */ private List ignoredViews; private List leftMenuItems; private List rightMenuItems; @@ -59,59 +67,127 @@ public class ResideMenu extends FrameLayout{ private float lastRawX; private boolean isInIgnoredView = false; private int scaleDirection = DIRECTION_LEFT; - private int pressedState = PRESSED_DOWN; + private int pressedState = PRESSED_DOWN; private List disabledSwipeDirection = new ArrayList(); // Valid scale factor is between 0.0f and 1.0f. private float mScaleValue = 0.5f; + private boolean mUse3D; + private static final int ROTATE_Y_ANGLE = 10; + public ResideMenu(Context context) { super(context); - initViews(context); + initViews(context, -1, -1); + } + + /** + * This constructor provides you to create menus with your own custom + * layouts, but if you use custom menu then do not call addMenuItem because + * it will not be able to find default views + */ + public ResideMenu(Context context, int customLeftMenuId, + int customRightMenuId) { + super(context); + initViews(context, customLeftMenuId, customRightMenuId); } - private void initViews(Context context){ - LayoutInflater inflater = (LayoutInflater) - context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - inflater.inflate(R.layout.residemenu, this); - scrollViewLeftMenu = (ScrollView) findViewById(R.id.sv_left_menu); - scrollViewRightMenu = (ScrollView) findViewById(R.id.sv_right_menu); + private void initViews(Context context, int customLeftMenuId, + int customRightMenuId) { + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + inflater.inflate(R.layout.residemenu_custom, this); + + if (customLeftMenuId >= 0) { + scrollViewLeftMenu = inflater.inflate(customLeftMenuId, this, false); + } else { + scrollViewLeftMenu = inflater.inflate( + R.layout.residemenu_custom_left_scrollview, this, false); + layoutLeftMenu = (LinearLayout) scrollViewLeftMenu.findViewById(R.id.layout_left_menu); + } + + if (customRightMenuId >= 0) { + scrollViewRightMenu = inflater.inflate(customRightMenuId, this, false); + } else { + scrollViewRightMenu = inflater.inflate( + R.layout.residemenu_custom_right_scrollview, this, false); + layoutRightMenu = (LinearLayout) scrollViewRightMenu.findViewById(R.id.layout_right_menu); + } + imageViewShadow = (ImageView) findViewById(R.id.iv_shadow); - layoutLeftMenu = (LinearLayout) findViewById(R.id.layout_left_menu); - layoutRightMenu = (LinearLayout) findViewById(R.id.layout_right_menu); imageViewBackground = (ImageView) findViewById(R.id.iv_background); + + RelativeLayout menuHolder = (RelativeLayout) findViewById(R.id.sv_menu_holder); + menuHolder.addView(scrollViewLeftMenu); + menuHolder.addView(scrollViewRightMenu); + } + + /** + * Returns left menu view so you can findViews and do whatever you want with + */ + public View getLeftMenuView() { + return scrollViewLeftMenu; + } + + /** + * Returns right menu view so you can findViews and do whatever you want with + */ + public View getRightMenuView() { + return scrollViewRightMenu; } @Override protected boolean fitSystemWindows(Rect insets) { - // Applies the content insets to the view's padding, consuming that content (modifying the insets to be 0), - // and returning true. This behavior is off by default and can be enabled through setFitsSystemWindows(boolean) + // Applies the content insets to the view's padding, consuming that + // content (modifying the insets to be 0), + // and returning true. This behavior is off by default and can be + // enabled through setFitsSystemWindows(boolean) // in api14+ devices. - this.setPadding(viewActivity.getPaddingLeft() + insets.left, viewActivity.getPaddingTop() + insets.top, - viewActivity.getPaddingRight() + insets.right, viewActivity.getPaddingBottom() + insets.bottom); + + // This is added to fix soft navigationBar's overlapping to content above LOLLIPOP + int bottomPadding = viewActivity.getPaddingBottom() + insets.bottom; + boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); + boolean hasHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME); + if (!hasBackKey || !hasHomeKey) {//there's a navigation bar + bottomPadding += getNavigationBarHeight(); + } + + this.setPadding(viewActivity.getPaddingLeft() + insets.left, + viewActivity.getPaddingTop() + insets.top, + viewActivity.getPaddingRight() + insets.right, + bottomPadding); insets.left = insets.top = insets.right = insets.bottom = 0; return true; } + private int getNavigationBarHeight() { + Resources resources = getResources(); + int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); + if (resourceId > 0) { + return resources.getDimensionPixelSize(resourceId); + } + return 0; + } + /** * Set up the activity; * * @param activity */ - public void attachToActivity(Activity activity){ + public void attachToActivity(Activity activity) { initValue(activity); setShadowAdjustScaleXByOrientation(); viewDecor.addView(this, 0); } - private void initValue(Activity activity){ - this.activity = activity; - leftMenuItems = new ArrayList(); - rightMenuItems = new ArrayList(); - ignoredViews = new ArrayList(); + private void initValue(Activity activity) { + this.activity = activity; + leftMenuItems = new ArrayList(); + rightMenuItems = new ArrayList(); + ignoredViews = new ArrayList(); viewDecor = (ViewGroup) activity.getWindow().getDecorView(); viewActivity = new TouchDisableView(this.activity); - View mContent = viewDecor.getChildAt(0); + View mContent = viewDecor.getChildAt(0); viewDecor.removeViewAt(0); viewActivity.setContent(mContent); addView(viewActivity); @@ -121,7 +197,7 @@ private void initValue(Activity activity){ parent.removeView(scrollViewRightMenu); } - private void setShadowAdjustScaleXByOrientation(){ + private void setShadowAdjustScaleXByOrientation() { int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) { shadowAdjustScaleX = 0.034f; @@ -137,7 +213,7 @@ private void setShadowAdjustScaleXByOrientation(){ * * @param imageResource */ - public void setBackground(int imageResource){ + public void setBackground(int imageResource) { imageViewBackground.setImageResource(imageResource); } @@ -146,7 +222,7 @@ public void setBackground(int imageResource){ * * @param isVisible */ - public void setShadowVisible(boolean isVisible){ + public void setShadowVisible(boolean isVisible) { if (isVisible) imageViewShadow.setBackgroundResource(R.drawable.shadow); else @@ -155,12 +231,13 @@ public void setShadowVisible(boolean isVisible){ /** * Add a single item to the left menu; - * + *

* WARNING: It will be removed from v2.0. + * * @param menuItem */ @Deprecated - public void addMenuItem(ResideMenuItem menuItem){ + public void addMenuItem(ResideMenuItem menuItem) { this.leftMenuItems.add(menuItem); layoutLeftMenu.addView(menuItem); } @@ -171,11 +248,11 @@ public void addMenuItem(ResideMenuItem menuItem){ * @param menuItem * @param direction */ - public void addMenuItem(ResideMenuItem menuItem, int direction){ - if (direction == DIRECTION_LEFT){ + public void addMenuItem(ResideMenuItem menuItem, int direction) { + if (direction == DIRECTION_LEFT) { this.leftMenuItems.add(menuItem); layoutLeftMenu.addView(menuItem); - }else{ + } else { this.rightMenuItems.add(menuItem); layoutRightMenu.addView(menuItem); } @@ -183,10 +260,11 @@ public void addMenuItem(ResideMenuItem menuItem, int direction){ /** * WARNING: It will be removed from v2.0. + * * @param menuItems */ @Deprecated - public void setMenuItems(List menuItems){ + public void setMenuItems(List menuItems) { this.leftMenuItems = menuItems; rebuildMenu(); } @@ -197,7 +275,7 @@ public void setMenuItems(List menuItems){ * @param menuItems * @param direction */ - public void setMenuItems(List menuItems, int direction){ + public void setMenuItems(List menuItems, int direction) { if (direction == DIRECTION_LEFT) this.leftMenuItems = menuItems; else @@ -205,17 +283,23 @@ public void setMenuItems(List menuItems, int direction){ rebuildMenu(); } - private void rebuildMenu(){ - layoutLeftMenu.removeAllViews(); - layoutRightMenu.removeAllViews(); - for (ResideMenuItem leftMenuItem : leftMenuItems) - layoutLeftMenu.addView(leftMenuItem); - for (ResideMenuItem rightMenuItem : rightMenuItems) - layoutRightMenu.addView(rightMenuItem); + private void rebuildMenu() { + if (layoutLeftMenu != null) { + layoutLeftMenu.removeAllViews(); + for (ResideMenuItem leftMenuItem : leftMenuItems) + layoutLeftMenu.addView(leftMenuItem); + } + + if (layoutRightMenu != null) { + layoutRightMenu.removeAllViews(); + for (ResideMenuItem rightMenuItem : rightMenuItems) + layoutRightMenu.addView(rightMenuItem); + } } /** * WARNING: It will be removed from v2.0. + * * @return */ @Deprecated @@ -229,7 +313,7 @@ public List getMenuItems() { * @return */ public List getMenuItems(int direction) { - if ( direction == DIRECTION_LEFT) + if (direction == DIRECTION_LEFT) return leftMenuItems; else return rightMenuItems; @@ -253,14 +337,14 @@ public OnMenuListener getMenuListener() { /** * Show the menu; */ - public void openMenu(int direction){ + public void openMenu(int direction) { setScaleDirection(direction); isOpened = true; AnimatorSet scaleDown_activity = buildScaleDownAnimation(viewActivity, mScaleValue, mScaleValue); AnimatorSet scaleDown_shadow = buildScaleDownAnimation(imageViewShadow, - mScaleValue + shadowAdjustScaleX, mScaleValue + shadowAdjustScaleY); + mScaleValue + shadowAdjustScaleX, mScaleValue + shadowAdjustScaleY); AnimatorSet alpha_menu = buildMenuAnimation(scrollViewMenu, 1.0f); scaleDown_shadow.addListener(animationListener); scaleDown_activity.playTogether(scaleDown_shadow); @@ -271,7 +355,7 @@ public void openMenu(int direction){ /** * Close the menu; */ - public void closeMenu(){ + public void closeMenu() { isOpened = false; AnimatorSet scaleUp_activity = buildScaleUpAnimation(viewActivity, 1.0f, 1.0f); @@ -284,30 +368,30 @@ public void closeMenu(){ } @Deprecated - public void setDirectionDisable(int direction){ + public void setDirectionDisable(int direction) { disabledSwipeDirection.add(direction); } - public void setSwipeDirectionDisable(int direction){ + public void setSwipeDirectionDisable(int direction) { disabledSwipeDirection.add(direction); } - private boolean isInDisableDirection(int direction){ + private boolean isInDisableDirection(int direction) { return disabledSwipeDirection.contains(direction); } - private void setScaleDirection(int direction){ + private void setScaleDirection(int direction) { int screenWidth = getScreenWidth(); float pivotX; float pivotY = getScreenHeight() * 0.5f; - if (direction == DIRECTION_LEFT){ + if (direction == DIRECTION_LEFT) { scrollViewMenu = scrollViewLeftMenu; - pivotX = screenWidth * 1.5f; - }else{ + pivotX = screenWidth * 1.5f; + } else { scrollViewMenu = scrollViewRightMenu; - pivotX = screenWidth * -0.5f; + pivotX = screenWidth * -0.5f; } ViewHelper.setPivotX(viewActivity, pivotX); @@ -336,7 +420,7 @@ public void onClick(View view) { private Animator.AnimatorListener animationListener = new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { - if (isOpened()){ + if (isOpened()) { showScrollViewMenu(scrollViewMenu); if (menuListener != null) menuListener.openMenu(); @@ -346,10 +430,10 @@ public void onAnimationStart(Animator animation) { @Override public void onAnimationEnd(Animator animation) { // reset the view; - if(isOpened()){ + if (isOpened()) { viewActivity.setTouchDisable(true); viewActivity.setOnClickListener(viewActivityOnClickListener); - }else{ + } else { viewActivity.setTouchDisable(false); viewActivity.setOnClickListener(null); hideScrollViewMenu(scrollViewLeftMenu); @@ -378,7 +462,7 @@ public void onAnimationRepeat(Animator animation) { * @param targetScaleY * @return */ - private AnimatorSet buildScaleDownAnimation(View target,float targetScaleX,float targetScaleY){ + private AnimatorSet buildScaleDownAnimation(View target, float targetScaleX, float targetScaleY) { AnimatorSet scaleDown = new AnimatorSet(); scaleDown.playTogether( @@ -386,6 +470,11 @@ private AnimatorSet buildScaleDownAnimation(View target,float targetScaleX,float ObjectAnimator.ofFloat(target, "scaleY", targetScaleY) ); + if (mUse3D) { + int angle = scaleDirection == DIRECTION_LEFT ? -ROTATE_Y_ANGLE : ROTATE_Y_ANGLE; + scaleDown.playTogether(ObjectAnimator.ofFloat(target, "rotationY", angle)); + } + scaleDown.setInterpolator(AnimationUtils.loadInterpolator(activity, android.R.anim.decelerate_interpolator)); scaleDown.setDuration(250); @@ -400,7 +489,7 @@ private AnimatorSet buildScaleDownAnimation(View target,float targetScaleX,float * @param targetScaleY * @return */ - private AnimatorSet buildScaleUpAnimation(View target,float targetScaleX,float targetScaleY){ + private AnimatorSet buildScaleUpAnimation(View target, float targetScaleX, float targetScaleY) { AnimatorSet scaleUp = new AnimatorSet(); scaleUp.playTogether( @@ -408,11 +497,15 @@ private AnimatorSet buildScaleUpAnimation(View target,float targetScaleX,float t ObjectAnimator.ofFloat(target, "scaleY", targetScaleY) ); + if (mUse3D) { + scaleUp.playTogether(ObjectAnimator.ofFloat(target, "rotationY", 0)); + } + scaleUp.setDuration(250); return scaleUp; } - private AnimatorSet buildMenuAnimation(View target, float alpha){ + private AnimatorSet buildMenuAnimation(View target, float alpha) { AnimatorSet alphaAnimation = new AnimatorSet(); alphaAnimation.playTogether( @@ -430,22 +523,23 @@ private AnimatorSet buildMenuAnimation(View target, float alpha){ * * @param v */ - public void addIgnoredView(View v){ + public void addIgnoredView(View v) { ignoredViews.add(v); } /** * Remove a view from ignored views; + * * @param v */ - public void removeIgnoredView(View v){ + public void removeIgnoredView(View v) { ignoredViews.remove(v); } /** * Clear the ignored view list; */ - public void clearIgnoredViewList(){ + public void clearIgnoredViewList() { ignoredViews.clear(); } @@ -466,16 +560,16 @@ private boolean isInIgnoredView(MotionEvent ev) { return false; } - private void setScaleDirectionByRawX(float currentRawX){ + private void setScaleDirectionByRawX(float currentRawX) { if (currentRawX < lastRawX) setScaleDirection(DIRECTION_RIGHT); else setScaleDirection(DIRECTION_LEFT); } - private float getTargetScale(float currentRawX){ + private float getTargetScale(float currentRawX) { float scaleFloatX = ((currentRawX - lastRawX) / getScreenWidth()) * 0.75f; - scaleFloatX = scaleDirection == DIRECTION_RIGHT ? - scaleFloatX : scaleFloatX; + scaleFloatX = scaleDirection == DIRECTION_RIGHT ? -scaleFloatX : scaleFloatX; float targetScale = ViewHelper.getScaleX(viewActivity) - scaleFloatX; targetScale = targetScale > 1.0f ? 1.0f : targetScale; @@ -491,43 +585,52 @@ public boolean dispatchTouchEvent(MotionEvent ev) { if (currentActivityScaleX == 1.0f) setScaleDirectionByRawX(ev.getRawX()); - switch (ev.getAction()){ + switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: lastActionDownX = ev.getX(); lastActionDownY = ev.getY(); isInIgnoredView = isInIgnoredView(ev) && !isOpened(); - pressedState = PRESSED_DOWN; + pressedState = PRESSED_DOWN; break; case MotionEvent.ACTION_MOVE: if (isInIgnoredView || isInDisableDirection(scaleDirection)) break; - if(pressedState != PRESSED_DOWN && + if (pressedState != PRESSED_DOWN && pressedState != PRESSED_MOVE_HORIZONTAL) break; int xOffset = (int) (ev.getX() - lastActionDownX); int yOffset = (int) (ev.getY() - lastActionDownY); - if(pressedState == PRESSED_DOWN) { - if(yOffset > 25 || yOffset < -25) { + if (pressedState == PRESSED_DOWN) { + if (yOffset > 25 || yOffset < -25) { pressedState = PRESSED_MOVE_VERTICAL; break; } - if(xOffset < -50 || xOffset > 50) { + if (xOffset < -50 || xOffset > 50) { pressedState = PRESSED_MOVE_HORIZONTAL; ev.setAction(MotionEvent.ACTION_CANCEL); } - } else if(pressedState == PRESSED_MOVE_HORIZONTAL) { + } else if (pressedState == PRESSED_MOVE_HORIZONTAL) { if (currentActivityScaleX < 0.95) showScrollViewMenu(scrollViewMenu); float targetScale = getTargetScale(ev.getRawX()); + if (mUse3D) { + int angle = scaleDirection == DIRECTION_LEFT ? -ROTATE_Y_ANGLE : ROTATE_Y_ANGLE; + angle *= (1 - targetScale) * 2; + ViewHelper.setRotationY(viewActivity, angle); + + ViewHelper.setScaleX(imageViewShadow, targetScale - shadowAdjustScaleX); + ViewHelper.setScaleY(imageViewShadow, targetScale - shadowAdjustScaleY); + } else { + ViewHelper.setScaleX(imageViewShadow, targetScale + shadowAdjustScaleX); + ViewHelper.setScaleY(imageViewShadow, targetScale + shadowAdjustScaleY); + } ViewHelper.setScaleX(viewActivity, targetScale); ViewHelper.setScaleY(viewActivity, targetScale); - ViewHelper.setScaleX(imageViewShadow, targetScale + shadowAdjustScaleX); - ViewHelper.setScaleY(imageViewShadow, targetScale + shadowAdjustScaleY); ViewHelper.setAlpha(scrollViewMenu, (1 - targetScale) * 2.0f); lastRawX = ev.getRawX(); @@ -542,15 +645,15 @@ public boolean dispatchTouchEvent(MotionEvent ev) { if (pressedState != PRESSED_MOVE_HORIZONTAL) break; pressedState = PRESSED_DONE; - if (isOpened()){ + if (isOpened()) { if (currentActivityScaleX > 0.56f) closeMenu(); else openMenu(scaleDirection); - }else{ - if (currentActivityScaleX < 0.94f){ + } else { + if (currentActivityScaleX < 0.94f) { openMenu(scaleDirection); - }else{ + } else { closeMenu(); } } @@ -562,21 +665,25 @@ public boolean dispatchTouchEvent(MotionEvent ev) { return super.dispatchTouchEvent(ev); } - public int getScreenHeight(){ + public int getScreenHeight() { activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.heightPixels; } - public int getScreenWidth(){ + public int getScreenWidth() { activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.widthPixels; } - + public void setScaleValue(float scaleValue) { this.mScaleValue = scaleValue; } - public interface OnMenuListener{ + public void setUse3D(boolean use3D) { + mUse3D = use3D; + } + + public interface OnMenuListener { /** * This method will be called at the finished time of opening menu animations. @@ -589,14 +696,14 @@ public interface OnMenuListener{ public void closeMenu(); } - private void showScrollViewMenu(ScrollView scrollViewMenu){ - if (scrollViewMenu != null && scrollViewMenu.getParent() == null){ + private void showScrollViewMenu(View scrollViewMenu) { + if (scrollViewMenu != null && scrollViewMenu.getParent() == null) { addView(scrollViewMenu); } } - private void hideScrollViewMenu(ScrollView scrollViewMenu){ - if (scrollViewMenu != null && scrollViewMenu.getParent() != null){ + private void hideScrollViewMenu(View scrollViewMenu) { + if (scrollViewMenu != null && scrollViewMenu.getParent() != null) { removeView(scrollViewMenu); } } diff --git a/ResideMenuDemo/src/com/special/ResideMenuDemo/MenuActivity.java b/ResideMenuDemo/src/com/special/ResideMenuDemo/MenuActivity.java index f80c925..9150623 100644 --- a/ResideMenuDemo/src/com/special/ResideMenuDemo/MenuActivity.java +++ b/ResideMenuDemo/src/com/special/ResideMenuDemo/MenuActivity.java @@ -36,6 +36,7 @@ private void setUpMenu() { // attach to current activity; resideMenu = new ResideMenu(this); + resideMenu.setUse3D(true); resideMenu.setBackground(R.drawable.menu_background); resideMenu.attachToActivity(this); resideMenu.setMenuListener(menuListener);