package com.rincliu.library.widget.menudrawer; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; public abstract class StaticDrawer extends MenuDrawer { protected Position mPosition; StaticDrawer(Activity activity, int dragMode) { super(activity, dragMode); } public StaticDrawer(Context context) { super(context); } public StaticDrawer(Context context, AttributeSet attrs) { super(context, attrs); } public StaticDrawer(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); if (mDropShadowEnabled) drawDropShadow(canvas); if (mActiveIndicator != null) drawIndicator(canvas); } private void drawDropShadow(Canvas canvas) { final int width = getWidth(); final int height = getHeight(); final int menuSize = mMenuSize; final int dropShadowSize = mDropShadowSize; switch (mPosition) { case LEFT: mDropShadowDrawable.setBounds(menuSize - dropShadowSize, 0, menuSize, height); break; case RIGHT: mDropShadowDrawable.setBounds(width - menuSize, 0, width - menuSize + dropShadowSize, height); break; } mDropShadowDrawable.draw(canvas); } protected abstract void drawIndicator(Canvas canvas); @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { final int width = r - l; final int height = b - t; switch (mPosition) { case LEFT: mMenuContainer.layout(0, 0, mMenuSize, height); mContentContainer.layout(mMenuSize, 0, width, height); break; case RIGHT: mMenuContainer.layout(width - mMenuSize, 0, width, height); mContentContainer.layout(0, 0, width - mMenuSize, height); break; } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int widthMode = MeasureSpec.getMode(widthMeasureSpec); final int heightMode = MeasureSpec.getMode(heightMeasureSpec); if (widthMode != MeasureSpec.EXACTLY || heightMode != MeasureSpec.EXACTLY) { throw new IllegalStateException("Must measure with an exact size"); } final int width = MeasureSpec.getSize(widthMeasureSpec); final int height = MeasureSpec.getSize(heightMeasureSpec); if (!mMenuSizeSet) mMenuSize = (int) (height * 0.25f); switch (mPosition) { case LEFT: case RIGHT: { final int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); final int menuWidth = mMenuSize; final int menuWidthMeasureSpec = MeasureSpec.makeMeasureSpec(menuWidth, MeasureSpec.EXACTLY); final int contentWidth = width - menuWidth; final int contentWidthMeasureSpec = MeasureSpec.makeMeasureSpec(contentWidth, MeasureSpec.EXACTLY); mContentContainer.measure(contentWidthMeasureSpec, childHeightMeasureSpec); mMenuContainer.measure(menuWidthMeasureSpec, childHeightMeasureSpec); break; } } setMeasuredDimension(width, height); } @Override public void toggleMenu(boolean animate) {} @Override public void openMenu(boolean animate) {} @Override public void closeMenu(boolean animate) {} @Override public boolean isMenuVisible() { return true; } @Override public void setMenuSize(int size) { mMenuSize = size; mMenuSizeSet = true; requestLayout(); invalidate(); } @Override public void setOffsetMenuEnabled(boolean offsetMenu) {} @Override public boolean getOffsetMenuEnabled() { return false; } @Override public void peekDrawer() {} @Override public void peekDrawer(long delay) {} @Override public void peekDrawer(long startDelay, long delay) {} @Override public void setHardwareLayerEnabled(boolean enabled) {} @Override public int getTouchMode() { return TOUCH_MODE_NONE; } @Override public void setTouchMode(int mode) {} @Override public void setTouchBezelSize(int size) {} @Override public int getTouchBezelSize() { return 0; } }