jfeinstein10 / SlidingMenu

An Android library that allows you to easily create applications with slide-in menus. You may use it in your Android apps provided that you cite this project and include the license in your app. Thanks!
Apache License 2.0
11.08k stars 5.04k forks source link

can i scale contentview when menu opened? #638

Open gbstark opened 10 years ago

gbstark commented 10 years ago

i want to scale my contentview when left/right menu opened.

but i can't add scaling function because slidemenu use scroller.

when i google it, i know scroller doesn't support scale option.

how can i scale contentview?

ghost commented 10 years ago

Did you find a solution for this?

mpociot commented 9 years ago

I'd also be interested in a solution

ares89 commented 9 years ago

of course you can. add this when you want use the Scale

SlidingMenu.CanvasTransformer aboveTransformer = new SlidingMenu.CanvasTransformer() {
    @Override
    public void transformCanvas(Canvas canvas, float percentOpen) {
    float scale = (float) (percentOpen * 0.25 + 0.75);
    canvas.scale(scale, scale, 0, canvas.getHeight() / 2);
    }
};
mSlideMenu.setAboveCanvasTransformer(aboveTransformer);

add this in SlidingMenu

/**
 * Sets the above canvas transformer.
 *
 * @param t the new above canvas transformer
 */
public void setAboveCanvasTransformer(CanvasTransformer t) {
    mViewAbove.setCanvasTransformer(t);
}

add this in CustomViewAbove

public SlidingMenu.CanvasTransformer getTransformer() {
    return mTransformer;
}

public void setCanvasTransformer(SlidingMenu.CanvasTransformer mTransformer) {
    this.mTransformer = mTransformer;
}

private SlidingMenu.CanvasTransformer mTransformer;

@Override
protected void dispatchDraw(Canvas canvas) {
if (mTransformer != null) {
    canvas.save();
    mTransformer.transformCanvas(canvas, 1-getPercentOpen());
    super.dispatchDraw(canvas);
    canvas.restore();
} else
    super.dispatchDraw(canvas);
// Draw the margin drawable if needed.
mViewBehind.drawShadow(mContent, canvas);
mViewBehind.drawFade(mContent, canvas, getPercentOpen());
mViewBehind.drawSelector(mContent, canvas, getPercentOpen());
}