Skip to content

Commit

Permalink
333
Browse files Browse the repository at this point in the history
  • Loading branch information
yinhangfeng committed Sep 26, 2013
1 parent db43559 commit d308e30
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public void onCreate(Bundle savedInstanceState) {
menu.setShadowDrawable(R.drawable.shadow);
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
menu.setFadeDegree(0.35f);
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);
menu.setMenu(R.layout.menu_frame);
getSupportFragmentManager()
.beginTransaction()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ public float getInterpolation(float t) {
// private int mMode;
private boolean mEnabled = true;

/**
* 当前页面改变listener 触发SlidingMenu的mOpenListener等的调用
*/
private OnPageChangeListener mOnPageChangeListener;
private OnPageChangeListener mInternalPageChangeListener;

Expand Down Expand Up @@ -614,12 +617,12 @@ private boolean thisTouchAllowed(MotionEvent ev) {
return mViewBehind.menuOpenTouchAllowed(mContent, mCurItem, x);
} else {
switch (mTouchMode) {
case SlidingMenu.TOUCHMODE_FULLSCREEN:
case SlidingMenu.TOUCHMODE_FULLSCREEN://TOUCHMODE_FULLSCREEN模式时检测是否在忽略的view上
return !isInIgnoredView(ev);
case SlidingMenu.TOUCHMODE_NONE:
return false;
case SlidingMenu.TOUCHMODE_MARGIN:
return mViewBehind.marginTouchAllowed(mContent, x);
return mViewBehind.marginTouchAllowed(mContent, x);//TOUCHMODE_MARGIN模式时检测触摸起点是否位于margin内
}
}
return false;
Expand Down Expand Up @@ -651,6 +654,7 @@ private int getPointerIndex(MotionEvent ev, int id) {

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.i(TAG, "onInterceptTouchEvent");

if (!mEnabled)
return false;
Expand Down Expand Up @@ -705,6 +709,7 @@ public boolean onInterceptTouchEvent(MotionEvent ev) {

@Override
public boolean onTouchEvent(MotionEvent ev) {
Log.i(TAG, "onTouchEvent");

if (!mEnabled)
return false;
Expand Down Expand Up @@ -873,6 +878,9 @@ private int determineTargetPage(float pageOffset, int velocity, int deltaX) {
return targetPage;
}

/**
* 获取当前menu打开的比例
*/
protected float getPercentOpen() {
return Math.abs(mScrollX-mContent.getLeft()) / getBehindWidth();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,28 @@ public class CustomViewBehind extends ViewGroup {

private static final String TAG = "CustomViewBehind";

/**
* 默认TOUCHMODE_MARGIN模式时的margin
*/
private static final int MARGIN_THRESHOLD = 48; // dips
private int mTouchMode = SlidingMenu.TOUCHMODE_MARGIN;

private CustomViewAbove mViewAbove;

private View mContent;
private View mSecondaryContent;
/**
* TOUCHMODE_MARGIN模式时的margin
*/
private int mMarginThreshold;
/**
* 宽度偏移
*/
private int mWidthOffset;
private CanvasTransformer mTransformer;
/**
* menu是否可用(可见) 不可用时CustomViewBehind劫持touch事件
*/
private boolean mChildrenEnabled;

public CustomViewBehind(Context context) {
Expand Down Expand Up @@ -105,11 +117,13 @@ public void scrollTo(int x, int y) {

@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
Log.i(TAG, "onInterceptTouchEvent");
return !mChildrenEnabled;
}

@Override
public boolean onTouchEvent(MotionEvent e) {
Log.i(TAG, "onTouchEvent");
return !mChildrenEnabled;
}

Expand Down Expand Up @@ -149,11 +163,18 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
private boolean mFadeEnabled;
private final Paint mFadePaint = new Paint();
private float mScrollScale;

/**
* 阴影drawable
*/
private Drawable mShadowDrawable;
private Drawable mSecondaryShadowDrawable;
private int mShadowWidth;
private float mFadeDegree;

/**
* 设置模式 并设置左右菜单可见性
*/
public void setMode(int mode) {
if (mode == SlidingMenu.LEFT || mode == SlidingMenu.RIGHT) {
if (mContent != null)
Expand All @@ -168,6 +189,10 @@ public int getMode() {
return mMode;
}

/**
* 设置behind相对于above的移动比例 默认0.33
* @param scrollScale
*/
public void setScrollScale(float scrollScale) {
mScrollScale = scrollScale;
}
Expand Down Expand Up @@ -212,6 +237,9 @@ public int getMenuPage(int page) {
}
}

/**
* 滚动Behind
*/
public void scrollBehindTo(View content, int x, int y) {
int vis = View.VISIBLE;
if (mMode == SlidingMenu.LEFT) {
Expand All @@ -234,9 +262,12 @@ public void scrollBehindTo(View content, int x, int y) {
}
if (vis == View.INVISIBLE)
Log.v(TAG, "behind INVISIBLE");
setVisibility(vis);
setVisibility(vis);//设置ViewBehind是否可见
}

/**
* 获得显示menu时above需要滚动的x值
*/
public int getMenuLeft(View content, int page) {
if (mMode == SlidingMenu.LEFT) {
switch (page) {
Expand All @@ -263,6 +294,9 @@ public int getMenuLeft(View content, int page) {
return content.getLeft();
}

/**
* 获得above滚动的左边界
*/
public int getAbsLeftBound(View content) {
if (mMode == SlidingMenu.LEFT || mMode == SlidingMenu.LEFT_RIGHT) {
return content.getLeft() - getBehindWidth();
Expand All @@ -272,6 +306,9 @@ public int getAbsLeftBound(View content) {
return 0;
}

/**
* 获得above滚动的右边界
*/
public int getAbsRightBound(View content) {
if (mMode == SlidingMenu.LEFT) {
return content.getLeft();
Expand All @@ -281,6 +318,9 @@ public int getAbsRightBound(View content) {
return 0;
}

/**
* TOUCHMODE_MARGIN模式时检测触摸起点是否位于margin内
*/
public boolean marginTouchAllowed(View content, int x) {
int left = content.getLeft();
int right = content.getRight();
Expand All @@ -299,6 +339,9 @@ public void setTouchMode(int i) {
mTouchMode = i;
}

/**
* 菜单打开时是否允许touch
*/
public boolean menuOpenTouchAllowed(View content, int currPage, float x) {
switch (mTouchMode) {
case SlidingMenu.TOUCHMODE_FULLSCREEN:
Expand All @@ -309,6 +352,9 @@ public boolean menuOpenTouchAllowed(View content, int currPage, float x) {
return false;
}

/**
* 菜单打开时x是否在快速关闭菜单范围内
*/
public boolean menuTouchInQuickReturn(View content, int currPage, float x) {
if (mMode == SlidingMenu.LEFT || (mMode == SlidingMenu.LEFT_RIGHT && currPage == 0)) {
return x >= content.getLeft();
Expand All @@ -318,6 +364,9 @@ public boolean menuTouchInQuickReturn(View content, int currPage, float x) {
return false;
}

/**
* dx是否允许关闭菜单
*/
public boolean menuClosedSlideAllowed(float dx) {
if (mMode == SlidingMenu.LEFT) {
return dx > 0;
Expand All @@ -329,6 +378,9 @@ public boolean menuClosedSlideAllowed(float dx) {
return false;
}

/**
* dx是否允许打开菜单
*/
public boolean menuOpenSlideAllowed(float dx) {
if (mMode == SlidingMenu.LEFT) {
return dx < 0;
Expand All @@ -340,6 +392,9 @@ public boolean menuOpenSlideAllowed(float dx) {
return false;
}

/**
* 画阴影 由viewabove调用 content viewabove的内容
*/
public void drawShadow(View content, Canvas canvas) {
if (mShadowDrawable == null || mShadowWidth <= 0) return;
int left = 0;
Expand All @@ -359,6 +414,9 @@ public void drawShadow(View content, Canvas canvas) {
mShadowDrawable.draw(canvas);
}

/**
* 画渐隐 由viewabove调用 content viewabove的内容
*/
public void drawFade(View content, Canvas canvas, float openPercent) {
if (!mFadeEnabled) return;
final int alpha = (int) (mFadeDegree * 255 * Math.abs(1-openPercent));
Expand Down
Loading

0 comments on commit d308e30

Please sign in to comment.