美文网首页高级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