diff --git a/library/res/values/attrs.xml b/library/res/values/attrs.xml index d5ee00f32..362efec54 100644 --- a/library/res/values/attrs.xml +++ b/library/res/values/attrs.xml @@ -36,6 +36,7 @@ + diff --git a/library/src/com/jeremyfeinstein/slidingmenu/lib/CustomViewAbove.java b/library/src/com/jeremyfeinstein/slidingmenu/lib/CustomViewAbove.java index 42b2973d2..5b97bea8c 100644 --- a/library/src/com/jeremyfeinstein/slidingmenu/lib/CustomViewAbove.java +++ b/library/src/com/jeremyfeinstein/slidingmenu/lib/CustomViewAbove.java @@ -829,7 +829,7 @@ protected float getPercentOpen() { protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); // Draw the margin drawable if needed. - mViewBehind.drawShadow(mContent, canvas); + mViewBehind.drawShadow(mContent, canvas, getPercentOpen()); mViewBehind.drawFade(mContent, canvas, getPercentOpen()); mViewBehind.drawSelector(mContent, canvas, getPercentOpen()); } diff --git a/library/src/com/jeremyfeinstein/slidingmenu/lib/CustomViewBehind.java b/library/src/com/jeremyfeinstein/slidingmenu/lib/CustomViewBehind.java index fa0544d5b..4e1b3f7e4 100644 --- a/library/src/com/jeremyfeinstein/slidingmenu/lib/CustomViewBehind.java +++ b/library/src/com/jeremyfeinstein/slidingmenu/lib/CustomViewBehind.java @@ -30,6 +30,7 @@ public class CustomViewBehind extends ViewGroup { private int mWidthOffset; private CanvasTransformer mTransformer; private boolean mChildrenEnabled; + private boolean mShadowOutside; public CustomViewBehind(Context context) { this(context, null); @@ -190,6 +191,12 @@ public void setShadowWidth(int width) { mShadowWidth = width; invalidate(); } + + public void setShadowOutside(boolean b) { + mShadowOutside = b; + invalidate(); + } + public void setFadeEnabled(boolean b) { mFadeEnabled = b; @@ -340,20 +347,29 @@ public boolean menuOpenSlideAllowed(float dx) { return false; } - public void drawShadow(View content, Canvas canvas) { + public void drawShadow(View content, Canvas canvas, float openPercent) { if (mShadowDrawable == null || mShadowWidth <= 0) return; + if (mShadowOutside && openPercent<0.1) return; int left = 0; - if (mMode == SlidingMenu.LEFT) { - left = content.getLeft() - mShadowWidth; - } else if (mMode == SlidingMenu.RIGHT) { + if (mMode == SlidingMenu.LEFT) { + left = content.getLeft(); + if(!mShadowOutside) + left-=mShadowWidth; + } else if (mMode == SlidingMenu.RIGHT) { left = content.getRight(); + if(mShadowOutside) + left-= mShadowWidth; } else if (mMode == SlidingMenu.LEFT_RIGHT) { if (mSecondaryShadowDrawable != null) { left = content.getRight(); + if(mShadowOutside) + left-= mShadowWidth; mSecondaryShadowDrawable.setBounds(left, 0, left + mShadowWidth, getHeight()); mSecondaryShadowDrawable.draw(canvas); - } - left = content.getLeft() - mShadowWidth; + } + left = content.getLeft(); + if(!mShadowOutside) + left-=mShadowWidth; } mShadowDrawable.setBounds(left, 0, left + mShadowWidth, getHeight()); mShadowDrawable.draw(canvas); diff --git a/library/src/com/jeremyfeinstein/slidingmenu/lib/SlidingMenu.java b/library/src/com/jeremyfeinstein/slidingmenu/lib/SlidingMenu.java index b4483635f..ca54f5a23 100644 --- a/library/src/com/jeremyfeinstein/slidingmenu/lib/SlidingMenu.java +++ b/library/src/com/jeremyfeinstein/slidingmenu/lib/SlidingMenu.java @@ -270,6 +270,8 @@ else if (widthBehind != -1) } int shadowWidth = (int) ta.getDimension(R.styleable.SlidingMenu_shadowWidth, 0); setShadowWidth(shadowWidth); + boolean shadowOutside = (boolean) ta.getBoolean(R.styleable.SlidingMenu_shadowOutside, false); + setShadowOutside(shadowOutside); boolean fadeEnabled = ta.getBoolean(R.styleable.SlidingMenu_fadeEnabled, true); setFadeEnabled(fadeEnabled); float fadeDeg = ta.getFloat(R.styleable.SlidingMenu_fadeDegree, 0.33f); @@ -792,6 +794,15 @@ public void setShadowWidthRes(int resId) { public void setShadowWidth(int pixels) { mViewBehind.setShadowWidth(pixels); } + + /** + * Sets the to be drawn on outside below view. + * + * @param b true to enable outside shadow, false to disable it + */ + public void setShadowOutside(boolean b) { + mViewBehind.setShadowOutside(b); + } /** * Enables or disables the SlidingMenu's fade in and out