一行代码实现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.github.Arcns.arc-fast:rounded:1.23.1'
 implementation 'com.github.Arcns.arc-fast:drag-exit:1.23.1'
// Library中使用了Constraintlayout,如果你的项目中未引入,那么你还需要
implementation 'androidx.constraintlayout:constraintlayout:yourversion'

3.使用方式

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

 <com.arc.fast.view.FastDragExitLayout
        android:id="@+id/dragExitLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
      // 你自己的布局
      ... ...
</com.arc.fast.view.FastDragExitLayout>

代码文件:

// 简单调用方式一:在拖拽退出时关闭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为透明样式:

<style name="TransitionTheme" parent="@style/YourAppTheme">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item> // 注意:因系统bug,API26时android:windowIsTranslucent必须为false
        <item name="android:windowAnimationStyle">@null</item>
        <item name="android:windowActivityTransitions">true</item>
 </style>

项目地址:
https://github.com/Arcns/arc-fast

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容