- 侧滑效果[第十七篇]:侧滑框架SmartSwipe之互斥组
- 侧滑效果[第七篇]:侧滑框架SmartSwipe之侧滑透明效果
- 侧滑效果[第十四篇]:侧滑框架SmartSwipe之开门侧滑返回
- 侧滑效果[第十五篇]:侧滑框架SmartSwipe之全局返回
- 侧滑效果[第十篇]:侧滑框架SmartSwipe之仿手机QQ侧滑
- 侧滑效果[第四篇]:侧滑框架SmartSwipe之抽屉效果
- 侧滑效果[第三篇]:侧滑框架SmartSwipe之封装
- 你见过微信侧滑返回的联动效果,但开门效果、百叶窗效果见过吗?
- 侧滑效果[第十六篇]:侧滑框架SmartSwipe之下拉刷新
- 侧滑效果[第六篇]:侧滑框架SmartSwipe之弹性拉伸效果
SmartSwipe框架中有多种SwipeConsumer,当同时使用多个SwipeConsumer可能会发生意想不到的问题。

如图所示,有两个控件,分别加上抽屉,已知,这两个抽屉可以同时打开,假如需求不允许同时打开,那么这个问题该怎么解决呢?
SmartSwipe框架提供了互斥组
的概念来解决这个问题。
什么是互斥组?
答:管理一组SwipeConsumer,在这个组内的SwipeConsumer打开状态是互斥的:同时只能有0个或1个SwipeConsumer处于打开状态,打开一个,其它的都将自动关闭。
【创建一个互斥组对象】
互斥组的构造方法如下:
/**
* 创建一个SwipeConsumerExclusiveGroup
* @param smooth 是否平滑关闭(true:平滑动画关闭, false: 立即关闭)
*/
public SwipeConsumerExclusiveGroup(boolean smooth) {
this.smooth = smooth;
}
public SwipeConsumerExclusiveGroup() {
this.smooth = true;
}
【将SwipeConsumer添加到互斥组】
consumer.addToExclusiveGroup(group);
//或者
group.add(consumer);
【将一个SwipeConsumer从组内移除】
group.remove(consumer);
【手动将组内的所有SwipeConsumer全部关闭】
group.markNoCurrent();
【清除组内的所有SwipeConsumer】
group.clear();
【锁定其它的consumer】
若当前某个consumer已打开,在关闭它之前,其它SwipeConsumer无法开启
group.setLockOther(true);
【解决方案一】
将两个SwipeConsumer添加到同一个互斥组中,代码如下:
SwipeConsumerExclusiveGroup swipeConsumerExclusiveGroup = new SwipeConsumerExclusiveGroup();
SlidingConsumer slidingConsumer_1 = new SlidingConsumer();
slidingConsumer_1.addToExclusiveGroup(swipeConsumerExclusiveGroup);
SmartSwipeWrapper wrapper_1 = findViewById(R.id.main_ui_wrap_view_1);
wrapper_1.addConsumer(slidingConsumer_1).setRelativeMoveFactor(1f);
SlidingConsumer slidingConsumer_2 = new SlidingConsumer();
slidingConsumer_2.addToExclusiveGroup(swipeConsumerExclusiveGroup);
SmartSwipeWrapper wrapper_2 = findViewById(R.id.main_ui_wrap_view_2);
wrapper_2.addConsumer(slidingConsumer_2).setRelativeMoveFactor(1f);
效果如下:

【解决方案二】
将两个SwipeConsumer添加到同一个互斥组中,并若当前某个consumer已打开,在关闭它之前,其它SwipeConsumer无法开启,代码如下:
SwipeConsumerExclusiveGroup swipeConsumerExclusiveGroup = new SwipeConsumerExclusiveGroup();
SlidingConsumer slidingConsumer_1 = new SlidingConsumer();
slidingConsumer_1.addToExclusiveGroup(swipeConsumerExclusiveGroup);
SmartSwipeWrapper wrapper_1 = findViewById(R.id.main_ui_wrap_view_1);
wrapper_1.addConsumer(slidingConsumer_1).setRelativeMoveFactor(1f);
SlidingConsumer slidingConsumer_2 = new SlidingConsumer();
slidingConsumer_2.addToExclusiveGroup(swipeConsumerExclusiveGroup);
SmartSwipeWrapper wrapper_2 = findViewById(R.id.main_ui_wrap_view_2);
wrapper_2.addConsumer(slidingConsumer_2).setRelativeMoveFactor(1f);
swipeConsumerExclusiveGroup.setLockOther(true);
效果图如下:

如图所示,当第一个抽屉打开时,第二个抽屉无论怎么滑动都无法打开。
[本章完...]
网友评论