SlidingPaneLayout常用设置

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值