功能详解
Android SwipeDrawer 滑动抽屉库
  • 属性介绍
  • mode
  • open
  • mask
  • mainLayout
  • leftLayout
  • topLayout
  • rightLayout
  • bottomLayout
  • mainType
  • leftType
  • topType
  • rightType
  • bottomType
  • leftMode
  • topMode
  • rightMode
  • bottomMode
  • mainOpen
  • parentDrawer
  • mainScroll
  • leftScroll
  • topScroll
  • rightScroll
  • bottomScroll
  • leftDragOpen
  • topDragOpen
  • rightDragOpen
  • bottomDragOpen
  • showLayout
  • autoClose
  • maskClose
  • maskColor
  • dragClose
  • dragCloseType
  • scrollOuterDrag
  • autoLayout
  • shrinkRange
  • dragDamping
  • dragRange
  • leftDragRange
  • topDragRange
  • rightDragRange
  • bottomDragRange
  • leftOffset
  • topOffset
  • rightOffset
  • bottomOffset
  • dragSlop
  • turnCancel
  • maxDragSize
  • duration
  • interpolator
  • 回调接口
  • OnDrawerState
  • OnDrawerSwitch
  • OnDrawerChange
  • 调用方法
  • openDrawer
  • closeDrawer
  • toggleDrawer
  • setIntercept
  • drawerLayout
  • 全局方法
  • setAllIntercept
  • getAllIntercept
  • getParentDrawer
  • 其他
  • DrawerHolder

属性介绍

mode

打开模式分为三种:

  • :抽屉模式,主布局与抽屉布局同时移动View Preview
  • :覆盖模式,仅抽屉布局移动View Preview
  • :固定模式,仅主布局移动View Preview


open

初始化状态,默认打开指定方向:

  • :默认打开LeftView Preview
  • :默认打开TopView Preview
  • :默认打开RightView Preview
  • :默认打开BottomView Preview


mask

背景遮罩:

  • :不开启View Preview
  • :固定遮罩颜色View Preview
  • :遮罩逐渐深浅View Preview


mainLayout

指定主布局ID:

  • 若未指定该属性,则默认为第一个未指定ID的子布局
<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:mainLayout="@+id/mainDrawer">
    <RelativeLayout
        android:id="@+id/mainDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000" />
    ...
</cn.leaqi.drawer.SwipeDrawer>


leftLayout

指定Left布局ID:

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:leftLayout="@+id/leftDrawer">
    <RelativeLayout
        android:id="@+id/leftDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000" />
    ...
</cn.leaqi.drawer.SwipeDrawer>


topLayout

指定Top布局ID:

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:topLayout="@+id/topDrawer">
    <RelativeLayout
        android:id="@+id/topDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000" />
    ...
</cn.leaqi.drawer.SwipeDrawer>


rightLayout

指定Right布局ID:

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:rightLayout="@+id/rightDrawer">
    <RelativeLayout
        android:id="@+id/rightDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000" />
    ...
</cn.leaqi.drawer.SwipeDrawer>


bottomLayout

指定Bottom布局ID:

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:bottomLayout="@+id/bottomDrawer">
    <RelativeLayout
        android:id="@+id/bottomDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000" />
    ...
</cn.leaqi.drawer.SwipeDrawer>


mainType

主布局类型:

  • :非滑动布局,默认为该项
  • :垂直滑动布局,必须是直属子级,子子级用指定ID
  • :水平滑动布局,必须是直属子级,子子级用指定ID
<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:mainLayout="@+id/mainDrawer"
    app:mainType="scrollY">
    <ScrollView
        android:id="@+id/mainDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000">
        ...
    </ScrollView>
    ...
</cn.leaqi.drawer.SwipeDrawer>


leftType

Left布局类型:

  • :非滑动布局,默认为该项
  • :垂直滑动布局,必须是直属子级,子子级用指定ID
  • :水平滑动布局,必须是直属子级,子子级用指定ID
<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:leftLayout="@+id/leftDrawer"
    app:leftType="scrollY">
    <HorizontalScrollView
        android:id="@+id/leftDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000">
        ...
    </HorizontalScrollView>
    ...
</cn.leaqi.drawer.SwipeDrawer>


topType

Top布局类型:

  • :非滑动布局,默认为该项
  • :垂直滑动布局,必须是直属子级,子子级用指定ID
  • :水平滑动布局,必须是直属子级,子子级用指定ID
<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:topLayout="@+id/topDrawer"
    app:topType="scrollY">
    <ScrollView
        android:id="@+id/topDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000">
        ...
    </ScrollView>
    ...
</cn.leaqi.drawer.SwipeDrawer>


rightType

Right布局类型:

  • :非滑动布局,默认为该项
  • :垂直滑动布局,必须是直属子级,子子级用指定ID
  • :水平滑动布局,必须是直属子级,子子级用指定ID
<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:rightLayout="@+id/rightDrawer"
    app:rightType="scrollY">
    <HorizontalScrollView
        android:id="@+id/rightDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000">
        ...
    </HorizontalScrollView>
    ...
</cn.leaqi.drawer.SwipeDrawer>


bottomType

Bottom布局类型:

  • :非滑动布局,默认为该项
  • :垂直滑动布局,必须是直属子级,子子级用指定ID
  • :水平滑动布局,必须是直属子级,子子级用指定ID
<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:bottomLayout="@+id/bottomDrawer"
    app:bottomType="scrollY">
    <ScrollView
        android:id="@+id/bottomDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000">
        ...
    </ScrollView>
    ...
</cn.leaqi.drawer.SwipeDrawer>


leftMode

  • 该属性指定Left方向打开模式
  • 不设置则继承的打开方式


topMode

  • 该属性指定Top方向打开模式
  • 不设置则继承的打开方式


rightMode

  • 该属性指定Right方向打开模式
  • 不设置则继承的打开方式


bottomMode

  • 该属性指定Bottom方向打开模式
  • 不设置则继承的打开方式


mainOpen

打开后主布局触摸事件:开启遮罩后该属性设置将无效

  • :不屏蔽View Preview
  • :只允许点击View Preview
  • :禁止所有触摸事件View Preview


parentDrawer

指定上一级的布局ID,嵌套时使用:更多层嵌套以此内推

<cn.leaqi.drawer.SwipeDrawer
    android:id="@+id/rootSwipe"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:mainLayout="@+id/mainDrawer">
    <RelativeLayout
        android:id="@+id/mainDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000">
        <cn.leaqi.drawer.SwipeDrawer
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:mainLayout="@+id/sonMainDrawer"
            app:parentDrawer="@+id/rootSwipe">
            <RelativeLayout
                android:id="@+id/sonMainDrawer"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#3F51B5" />
            ...
        </cn.leaqi.drawer.SwipeDrawer>
    </RelativeLayout>
    ...
</cn.leaqi.drawer.SwipeDrawer>


mainScroll

指定主布局下滑动布局ID:子布局存在滑动布局,且滑动方向与一致时需设置该属性解决滑动优先级的问题

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:mainLayout="@+id/mainDrawer"
    app:mainScroll="@+id/mainScroll">
    <RelativeLayout
        android:id="@+id/mainDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ListView
            android:id="@+id/mainScroll"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </RelativeLayout>
    ...
</cn.leaqi.drawer.SwipeDrawer>


leftScroll

指定Left布局下滑动布局ID:子布局存在滑动布局,且滑动方向与一致时需设置该属性解决滑动优先级的问题

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:leftLayout="@+id/leftDrawer"
    app:leftScroll="@+id/leftScroll">
    <RelativeLayout
        android:id="@+id/leftDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <HorizontalScrollView
            android:id="@+id/leftScroll"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            ...
        </HorizontalScrollView>
    </RelativeLayout>
    ...
</cn.leaqi.drawer.SwipeDrawer>


topScroll

指定Top布局下滑动布局ID:子布局存在滑动布局,且滑动方向与一致时需设置该属性解决滑动优先级的问题

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:topLayout="@+id/topDrawer"
    app:topScroll="@+id/topScroll">
    <RelativeLayout
        android:id="@+id/topDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ScrollView
            android:id="@+id/topScroll"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            ...
        </ScrollView>
    </RelativeLayout>
    ...
</cn.leaqi.drawer.SwipeDrawer>


rightScroll

指定Right布局下滑动布局ID:子布局存在滑动布局,且滑动方向与一致时需设置该属性解决滑动优先级的问题

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:rightLayout="@+id/rightDrawer"
    app:rightScroll="@+id/rightScroll">
    <RelativeLayout
        android:id="@+id/rightDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <HorizontalScrollView
            android:id="@+id/rightScroll"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            ...
        </HorizontalScrollView>
    </RelativeLayout>
    ...
</cn.leaqi.drawer.SwipeDrawer>


bottomScroll

指定Bottom布局下滑动布局ID:子布局存在滑动布局,且滑动方向与一致时需设置该属性解决滑动优先级的问题

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:bottomLayout="@+id/bottomDrawer"
    app:bottomScroll="@+id/bottomScroll">
    <RelativeLayout
        android:id="@+id/bottomDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ScrollView
            android:id="@+id/bottomScroll"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            ...
        </ScrollView>
    </RelativeLayout>
    ...
</cn.leaqi.drawer.SwipeDrawer>


leftDragOpen

Left布局拖拽打开:设为后Left布局将无法通过拖拽的方式打开,但关闭不受此限制,默认值为:

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:leftDragOpen="false">
    ...
</cn.leaqi.drawer.SwipeDrawer>


topDragOpen

Top布局拖拽打开:设为后Top布局将无法通过拖拽的方式打开,但关闭不受此限制,默认值为:

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:topDragOpen="false">
    ...
</cn.leaqi.drawer.SwipeDrawer>


rightDragOpen

Right布局拖拽打开:设为后Right布局将无法通过拖拽的方式打开,但关闭不受此限制,默认值为:

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:rightDragOpen="false">
    ...
</cn.leaqi.drawer.SwipeDrawer>


bottomDragOpen

Bottom布局拖拽打开:设为后Bottom布局将无法通过拖拽的方式打开,但关闭不受此限制,默认值为:

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:bottomDragOpen="false">
    ...
</cn.leaqi.drawer.SwipeDrawer>


showLayout

非当前操作的布局是否隐藏,默认为

图为固定模式下,整体布局透明的50%演示

  • :显示View Preview
  • :隐藏View Preview


autoClose

打开后是否关闭其他:设为,打开后则会关闭其他

  • :自动关闭View Preview
  • :默认值,可同时打开多个View Preview


maskClose

点击遮罩后关闭:设为,且开启后点击遮罩背景会关闭当前

  • :点击关闭View Preview
  • :默认值,无操作


maskColor

遮罩颜色:默认值颜色为

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:mask="gradual"
    app:maskColor="#B3FF0000">
    ...
</cn.leaqi.drawer.SwipeDrawer>


dragClose

允许拖拽关闭:与拖拽打开同理

设为将无法通过拖拽的方式关闭,但打开不受此限制,默认值为:

<cn.leaqi.drawer.SwipeDrawer
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:dragClose="false">
    ...
</cn.leaqi.drawer.SwipeDrawer>


dragCloseType注:最低版本需 >= 1.4

拖拽关闭类型:限制主布局、抽屉布局、或者全局拖拽关闭,默认值为:

  • :全布局View Preview
  • :主布局View Preview
  • :抽屉布局View Preview


scrollOuterDrag

滑动布局之外是否允许拖拽关闭:抽屉布局各个方向下子滑动布局之外的布局是否允许拖拽关闭,默认值为:

  • :任何情况下都允许View Preview
  • :子滑动布局到顶或到底不可滑动才允许View Preview


autoLayout注:最低版本需 >= 1.2

布局自动更新:当布局尺寸发生变化将自动更新,默认值为:

  • :自动更新
  • :不自动更新


shrinkRange

拖拽距离:View Preview

  • 拖拽方向高/宽度 除以 ,拖拽到达距离后才会开启或关闭,否则回到原状态
  • 默认值为:,拖动方向高/宽度的5分之1
  • :可以拖拽,但不会开启或关闭


dragDamping注:版本 >= 1.5 时值范围在0-99,值越大速度越快

拖拽阻力:0-9View Preview

  • 值越小阻力越大
  • 默认值为:,无阻力


dragRange

边缘拖拽:View Preview

  • 值类型为:,设定后拖拽按下位置必须是dip的边缘位置才可以拖拽
  • 默认值为:,全部局拖拽


leftDragRange注:最低版本需 >= 1.5

Left边缘拖拽:View Preview

  • 值类型为:,设定后拖拽按下位置必须是dip的边缘位置才可以拖拽
  • 默认值为:,全部局拖拽


topDragRange注:最低版本需 >= 1.5

Top边缘拖拽:View Preview

  • 值类型为:,设定后拖拽按下位置必须是dip的边缘位置才可以拖拽
  • 默认值为:,全部局拖拽


rightDragRange注:最低版本需 >= 1.5

Right边缘拖拽:View Preview

  • 值类型为:,设定后拖拽按下位置必须是dip的边缘位置才可以拖拽
  • 默认值为:,全部局拖拽


bottomDragRange注:最低版本需 >= 1.5

Bottom边缘拖拽:View Preview

  • 值类型为:,设定后拖拽按下位置必须是dip的边缘位置才可以拖拽
  • 默认值为:,全部局拖拽


leftOffset注:最低版本需 >= 1.5

Left布局偏移:View Preview

  • 值类型为:,Left布局向外偏移dip,仅模式下有效
  • 默认值为:px


topOffset注:最低版本需 >= 1.5

Top布局偏移:View Preview

  • 值类型为:,Top布局向外偏移dip,仅模式下有效
  • 默认值为:px


rightOffset注:最低版本需 >= 1.5

Right布局偏移:View Preview

  • 值类型为:,Right布局向外偏移dip,仅模式下有效
  • 默认值为:px


bottomOffset注:最低版本需 >= 1.5

Bottom布局偏移:View Preview

  • 值类型为:,Bottom布局向外偏移dip,仅模式下有效
  • 默认值为:px


dragSlop注:最低版本需 >= 1.1

拖拽拦截距离:

  • 值类型为:,当拖拽距离大于dip时才拦截事件
  • 默认值为:px


turnCancel注:最低版本需 >= 1.6

回拽取消操作:View Preview

  • 值类型为:,当拖拽达到打开或关闭距离时,回拽距离大于时释放后会取消操作
  • 默认值为:px


maxDragSize

最大拖拽高/宽度:View Preview

  • 值类型为:,设定后打开时可拖拽至设定的距离
  • 默认值为:,布局高/宽度


duration

动画速度:View Preview

  • 值类型为:
  • 默认值为:


interpolator

动画插值器:

  • 减速:View Preview
  • 匀速:View Preview
  • 弹球效果:View Preview
  • 默认值为:先加速再减速


回调接口

OnDrawerState

监听开始、移动、开启、关闭、取消回调

final SwipeDrawer swipeDrawer = findViewById(R.id.swipeDrawer);
swipeDrawer.setOnDrawerState(new OnDrawerState() {
    @Override
    public void onStart(int type) {
        // 拖拽开始时回调
        // type 返回当前操作的方向
    }
    @Override
    public void onMove(int type, float progress) {
        // 拖拽移动时回调
        // type 返回当前操作的方向
        // progress 返回打开的进度 0 - 1
    }
    @Override
    public void onOpen(int type) {
        // 打开时回调
        // type 返回当前操作的方向
    }
    @Override
    public void onClose(int type) {
        // 关闭时回调
        // type 返回当前操作的方向
    }
    @Override
    public void onCancel(int type) {
        // 拖拽未达到打开或关闭距离时回调
        // type 返回当前操作的方向
    }
});


OnDrawerSwitch

监听开启、关闭回调

final SwipeDrawer swipeDrawer = findViewById(R.id.swipeDrawer);
swipeDrawer.setOnDrawerSwitch(new OnDrawerSwitch() {
    @Override
    public void onOpen(SwipeDrawer view) {
        // 打开时回调
        // view 返回当前操作的 SwipeDrawer
    }
    @Override
    public void onClose(SwipeDrawer view) {
        // 关闭时回调
        // view 返回当前操作的 SwipeDrawer
    }
});


OnDrawerChange

监听改变,由参数返回各种状态

final SwipeDrawer swipeDrawer = findViewById(R.id.swipeDrawer);
swipeDrawer.setOnDrawerChange(new OnDrawerChange() {
    @Override
    public void onChange(SwipeDrawer view, int state, float progress) {
        // view 返回当前操作的 SwipeDrawer
        // state 返回当前状态
        // progress 返回打开的进度 0 - 1
        switch (state) {
            case SwipeDrawer.STATE_START:
                // 拖拽开始时回调
                break;
            case SwipeDrawer.STATE_OPEN:
                // 打开时回调
                break;
            case SwipeDrawer.STATE_CLOSE :
                // 关闭时回调
                break;
            case SwipeDrawer.STATE_PROGRESS :
                // 拖拽移动时回调,progress 获取进度
                break;
            case SwipeDrawer.STATE_ANIM_OVER:
                // 动画执行完毕时回调
                break;
            case SwipeDrawer.STATE_CALL_OPEN:
                // 调用 openDrawer 方法打开时回调
                break;
            case SwipeDrawer.STATE_CALL_CLOSE:
                // 调用 closeDrawer 方法关闭时回调
                break;
            case SwipeDrawer.STATE_CANCEL:
                // 拖拽未达到打开或关闭距离时回调
                break;
            case SwipeDrawer.STATE_DRAG_INTO:
                // 拖拽超过 shrinkRange 距离时回调
                break;
            case SwipeDrawer.STATE_DRAG_OUT:
                // 拖拽未超过 shrinkRange 距离时回调
                break;
        }
    }
});


调用方法

openDrawer

调用打开方法

final SwipeDrawer swipeDrawer = findViewById(R.id.swipeDrawer);

// 打开 Left 方向
swipeDrawer.openDrawer(SwipeDrawer.DIRECTION_LEFT);

// 打开 Top 方向,不使用动画
swipeDrawer.openDrawer(SwipeDrawer.DIRECTION_TOP, false);

// 打开 Right 方向,使用动画,不使用回调接口
swipeDrawer.openDrawer(SwipeDrawer.DIRECTION_RIGHT, true, false);


closeDrawer

调用关闭方法

final SwipeDrawer swipeDrawer = findViewById(R.id.swipeDrawer);

// 关闭已打开的方向
swipeDrawer.closeDrawer();

// 关闭已打开的方向,不使用动画
swipeDrawer.closeDrawer(false);

// 关闭已打开的方向,使用动画,不使用回调接口
swipeDrawer.closeDrawer(true, false);

// 关闭 Left 方向
swipeDrawer.closeDrawer(SwipeDrawer.DIRECTION_LEFT);

// 关闭 Top 方向,不使用动画
swipeDrawer.closeDrawer(SwipeDrawer.DIRECTION_TOP, false);

// 关闭 Right 方向,使用动画,不使用回调接口
swipeDrawer.closeDrawer(SwipeDrawer.DIRECTION_RIGHT, true, false);


toggleDrawer

调用打开或者关闭方法

final SwipeDrawer swipeDrawer = findViewById(R.id.swipeDrawer);

// 打开或者关闭 Left 方向
swipeDrawer.toggleDrawer(SwipeDrawer.DIRECTION_LEFT);

// 打开或者关闭 Top 方向,不使用动画
swipeDrawer.toggleDrawer(SwipeDrawer.DIRECTION_TOP, false);

// 打开或者关闭 Right 方向,使用动画,不使用回调接口
swipeDrawer.toggleDrawer(SwipeDrawer.DIRECTION_RIGHT, true, false);


setIntercept

屏蔽触摸事件

final SwipeDrawer swipeDrawer = findViewById(R.id.swipeDrawer);

// 屏蔽所有方向触摸事件
swipeDrawer.setIntercept(false);

// 屏蔽 Top 方向触摸事件
swipeDrawer.setIntercept(SwipeDrawer.DIRECTION_TOP, false);

// 屏蔽 Left 方向触摸事件
final View leftLayout = findViewById(R.id.leftLayout);
swipeDrawer.setIntercept(leftLayout, false);


drawerLayout注:最低版本需 >= 1.2

更新布局

final SwipeDrawer swipeDrawer = findViewById(R.id.swipeDrawer);

// 在autoLayout关闭的情况下,可调用该方法手动更新布局
swipeDrawer.drawerLayout();


全局方法

setAllIntercept

设置屏蔽所有触摸事件

// 屏蔽所有 SwipeDrawer 触摸事件
SwipeDrawer.setAllIntercept(true);

// 取消屏蔽
SwipeDrawer.setAllIntercept(false);


getAllIntercept

获取触摸事件是否屏蔽

// 获取触摸事件是否被屏蔽
if (SwipeDrawer.getAllIntercept()) {
    // 被屏蔽
} else {
    // 没屏蔽
}


getParentDrawer

获取view的父级

final View view = findViewById(R.id.view);
SwipeDrawer getSwipeDrawer = SwipeDrawer.getParentDrawer(view);
if (getSwipeDrawer != null) {
    // getSwipeDrawer 为 view 的父级 SwipeDrawer
} else {
    // 未找到
}


其他

DrawerHolder

类作用是用于非自动关闭的情况在等有回收机制的布局保存状态

DrawerHolder类的使用:DrawerHolder drawerHolder = new DrawerHolder();

// drawerItem 传递 item 的 SwipeDrawer 布局
// bindHolder 传递唯一对象 Object
drawerHolder.bindHolder(drawerItem, dataItem);

// 清除已保存的数据,并关闭已打开的 SwipeDrawer
drawerHolder.clearHolder();

// 清除所有已保存的数据
drawerHolder.clear();
ListView调用示例:private class ListAdapter extends ArrayAdapter<String> {
    private Context context;
    private List<String> list;
    private DrawerHolder drawerHolder = new DrawerHolder();
    ...
    @NonNull
    public View getView(int position, View convertView, @NonNull ViewGroup parent) {
        View view;
        ViewHolder viewHolder;
        if (convertView == null) {
            view = LayoutInflater.from(context).inflate(R.layout.item, null);
            viewHolder = new ViewHolder();
            viewHolder.item = view.findViewById(R.id.item_drawer);
            view.setTag(viewHolder);
        } else {
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        }
        // bindHolder 的第一个参数为 SwipeDrawer 传递 item 的 SwipeDrawer 布局
        // bindHolder 的第二个参数为 Object 传递唯一对象
        drawerHolder.bindHolder(viewHolder.item, list.get(position));
        return view;
    }
    ...
    private class ViewHolder {
        SwipeDrawer item;
    }
}
RecyclerView调用示例:private class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListViewHolder> {
    private Context context;
    private List<String> list;
    private DrawerHolder drawerHolder = new DrawerHolder();
    ...
    @NonNull
    @Override
    public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View addView = LayoutInflater.from(context).inflate(R.layout.item, null);
        return new ListViewHolder(addView);
    }
    @Override
    public void onBindViewHolder(@NonNull ListViewHolder holder, int position) {
        // bindHolder 的第一个参数为 SwipeDrawer 传递 item 的 SwipeDrawer 布局
        // bindHolder 的第二个参数为 Object 传递唯一对象
        drawerHolder.bindHolder(holder.item, list.get(position));
    }
    ...
    private class ListViewHolder extends RecyclerView.ViewHolder {
        SwipeDrawer item;
        private ListViewHolder(View view) {
            super(view);
            item = view.findViewById(R.id.item_drawer);;
        }
        ...
    }
}