一行代码实现Android仿小红书、Lemon8拖拽退出效果

最近小伙伴有个需求,就是实现类似于小红书、Lemon8的拖拽退出效果,查了一圈发现并没有实现该功能的Library,于是便做了一个开源Library项目,方便大家集成后,一行代码实现Android仿小红书、Lemon8的拖拽退出效果。

集成效果

1.实现思路:

(1)创建一个自定义Layout,作为实现拖拽退出的视图
(2)在自定义Layout中,重写onInterceptTouchEvent,用来检查TouchEvent的滑动方向是否可以执行退拽退出效果,如果可以执行退拽退出效果则返回true表示拦截TouchEvent
(3)在自定义Layout中,重写onTouchEvent,在可以执行退拽退出效果时,先根据TouchEvent计算出滑动距离,然后使用滑动距离来设置leftMargin和topMargin以实现自定义Layout拖拽时移动的效果,同时设置scaleXscaleY以实现自定义Layout拖拽时缩放的效果。

2.集成方式:

allprojects {
    repositories {
        ...
        maven { url 'https://www.jitpack.io' }
    }
}
 implementation 'com.gitee.arcns.arc-fast:rounded:1.18.3'
 implementation 'com.gitee.arcns.arc-fast:drag-exit:1.18.3'
// Library中使用了Constraintlayout,如果你的项目中未引入,那么你还需要
implementation 'androidx.constraintlayout:constraintlayout:yourversion'

3.使用方式

使用时,只需要在布局文件的最外层包裹FastDragExitLayout,然后在代码文件中使用FastDragExitLayout.enableDragExit()启用拖拽退出效果即可。
布局文件:

 
      // 你自己的布局
      ... ...

代码文件:

// 简单调用方式一:在拖拽退出时关闭activity
dragExitLayout.enableDragExit(activity)

// 简单调用方式二:在拖拽退出时自定义处理操作
dragExitLayout.enableDragExit{
        // 自定义处理操作
}

// 完整的调用方式:
dragExitLayout.enableDragExit(
        bindExitActivity = activity, // 可选项:绑定在拖拽退出时的关闭activity
        onDragCallback = {isDrag:Boolean-> 
                 // 可选项:在开始或取消拖拽时的回调
        },
        onExitWaitCallback = {currentScale: Float, continueExit: (() -> Unit) ->
                 // 可选项:在拖拽退出之前的回调,你可以在此处进行耗时的操作,完成后调用        continueExit即可继续退出
        },
        onExitCallback = { currentScale: Float ->
                 // 可选项:在拖拽退出时的回调
        }
)

ps:如果你希望dragExitLayout在拖拽后,当前activity背景能够变得透明(即拖拽后可以看到上一个activity),那么你需要设置当前activity为透明样式:


项目地址:
https://github.com/Arcns/arc-fast
https://gitee.com/arcns/arc-fast
作者:
Arcns

你可能感兴趣的:(一行代码实现Android仿小红书、Lemon8拖拽退出效果)