美文网首页高级UI
侧滑效果[第十七篇]:侧滑框架SmartSwipe之互斥组

侧滑效果[第十七篇]:侧滑框架SmartSwipe之互斥组

作者: NoBugException | 来源:发表于2019-11-22 18:11 被阅读0次

SmartSwipe框架中有多种SwipeConsumer,当同时使用多个SwipeConsumer可能会发生意想不到的问题。

图片.png

如图所示,有两个控件,分别加上抽屉,已知,这两个抽屉可以同时打开,假如需求不允许同时打开,那么这个问题该怎么解决呢?

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);

效果如下:

310.gif

【解决方案二】

将两个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);

效果图如下:

311.gif

如图所示,当第一个抽屉打开时,第二个抽屉无论怎么滑动都无法打开。

[本章完...]

相关文章

网友评论

    本文标题:侧滑效果[第十七篇]:侧滑框架SmartSwipe之互斥组

    本文链接:https://www.haomeiwen.com/subject/cbeqwctx.html