1.侧滑主界面动画
设置侧滑时,右侧界面的动画:
该动画为,当左侧侧滑出来过程,alph透明度由1.0变为0.4;当关闭左侧导航时,透明度由0.4变为1.0的动画效果。
当然,你也可以在这里添加其他动画,自己发挥吧!
sm.setPanelSlideListener(new PanelSlideListener() { @Override public void onPanelSlide(View arg0, float arg1) { if (arg1 > 0.6f) { arg1 = 0.6f; } arg0.setAlpha(1 - arg1); } @Override public void onPanelOpened(View arg0) { } @Override public void onPanelClosed(View arg0) { } });
当然还有一个方法也可以达到类似渐变的效果:
sm.setSliderFadeColor(this.getResources().getColor(R.color.transparent));
试了下,感觉效果比较差,需要慢慢调试去了。
2.主页滑动距离设置
找了下,谷歌没有提供相应的api,那只能重写SlidingPaneLayout了。
public class MySliddingMenu extends SlidingPaneLayout { private float mInitialMotionX; private float mEdgeSlop; public MySliddingMenu(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mEdgeSlop = context.getResources().getDimensionPixelSize(R.dimen.dp_width_60); } public MySliddingMenu(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MySliddingMenu(Context context) { this(context, null); ViewConfiguration config = ViewConfiguration.get(context); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (MotionEventCompat.getActionMasked(ev)) { case MotionEvent.ACTION_DOWN: mInitialMotionX = ev.getX(); break; case MotionEvent.ACTION_MOVE: if (mInitialMotionX > mEdgeSlop && !isOpen()) { MotionEvent cancelEvent = MotionEvent.obtain(ev); cancelEvent.setAction(MotionEvent.ACTION_CANCEL); return super.onInterceptTouchEvent(cancelEvent); } } return super.onInterceptTouchEvent(ev); } }也就是当左侧未打开时,只要距离大于60px就取消滑动手势,也就不能侧滑了,即达到了我们设置可侧滑距离的效果。
3.侧滑冲突
public class MySliddingMenu extends SlidingPaneLayout { private float mInitialMotionX; private float mEdgeSlop; private boolean slindingEnable; public void setSlindingMenuDisable(boolean enable) { slindingEnable = enable; } public MySliddingMenu(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MySliddingMenu(Context context, AttributeSet attrs) { super(context, attrs); } public MySliddingMenu(Context context) { super(context); ViewConfiguration config = ViewConfiguration.get(context); mEdgeSlop = config.getScaledEdgeSlop(); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (MotionEventCompat.getActionMasked(ev)) { case MotionEvent.ACTION_DOWN: mInitialMotionX = ev.getX(); break; case MotionEvent.ACTION_MOVE: final float x = ev.getX(); final float y = ev.getY(); if (slindingEnable || (mInitialMotionX > mEdgeSlop && !isOpen() && canScroll(this, false, Math.round(x - mInitialMotionX), Math.round(x), Math.round(y)))) { MotionEvent cancelEvent = MotionEvent.obtain(ev); cancelEvent.setAction(MotionEvent.ACTION_CANCEL); return super.onInterceptTouchEvent(cancelEvent); } } return super.onInterceptTouchEvent(ev); } }
4.设置左侧导航栏阴影效果
sm.setShadowResourceLeft(R.drawable.nvgt_right_bg);直接给一个图片即可!