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);
直接给一个图片即可!




本文转载:CSDN博客