概述
我们都知道IOS系统自带手指滑动可以返回当前界面,现在我们使用Slidr可以很简单的实现这些功能,而且可以做一些个性化得定制.
Slidr使用
ReadMe
1 首先清单文件配置我们将要滑动Activity的theme,或者在我们的Application节点下全局配置theme,在theme里面添加
<!--切换activity时屏幕不变暗-->
<item name="android:windowIsTranslucent">true</item>
<!--窗口的背景设置成透明 ,这样的话在我们每个界面的根布局都要设置background,要不然就是透明的-->
<item name="android:windowBackground">@android:color/transparent</item>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_material_light">
2.在要滑动的Activity中OnCreate方法中使用,有三种方式
Slidr.attach(this);
Slidr.attach(this,slidrConfig);
Slidr.attach(this,statusBarColor1,statusBarColor2);
对,就简单的一行代码就可以实现手指滑动退出当前的Activity.
- 方式1 : 直接绑定当前的Activity,这种方式一般不适用,下面介绍,这个默认的是向左滑退出Activity
- 方式2 : 配置一些参数config, 这个最常用
- 方式3 : 默认的向左滑退出Activity,同时滑动时状态栏有渐变颜色,statusBarColor2是渐变开始的颜色,statusBarColor1渐变结束的颜色,滑动结束时状态栏颜色恢复系统默认的颜色,所以开始的时候我们可以设置状态栏的颜色为statusBarColor1
3.SlidrConfig的使用,可以定制化我们滑动的手势或者界面的交互等.
SlidrConfig config = new SlidrConfig.Builder()
.primaryColor(getResources().getColor(R.color.primary)
.secondaryColor(getResources().getColor(R.color.secondary)
.position(SlidrPosition.LEFT|RIGHT|TOP|BOTTOM|VERTICAL|HORIZONTAL)
.sensitivity(1f)
.scrimColor(Color.BLACK)
.scrimStartAlpha(0.8f)
.scrimEndAlpha(0f)
.velocityThreshold(2400)
.distanceThreshold(0.25f)
.edge(true|false)
.edgeSize(0.18f)
.listener(new SlidrListener(){...})
.build();
SlidrConfig是通过builder方式来设置某项参数,其中可以全部设置,也可以单独设置某项需要定制的,下面来解释一下每一个参数的含义:
- primaryColor : 滑动时状态栏渐变结束的颜色
- secondaryColor : 滑动时状态栏渐变开始的颜色
- position : 设置滑动时起始方向,可以同时设置多个,比如设置left,意思是从左向右滑
- sensitivity : 响应的敏感度,0-1f,默认值是1f
- scrimColor : 滑动时acitvity之间的蒙层颜色,默认是黑色
- scrimStartAlpha : 滑动开始时Activity之间蒙层颜色的透明度,0-1f,默认值0.8f
- scrimEndAlpha : 滑动结束时Activity之间蒙层颜色的透明度,0-1f,默认值0f
- velocityThreshold : 滑动时移动速度阈值,超过这个值会响应滑动事件
- distanceThreshold : 滑动时手指移动距离占屏幕百分比的阈值,超过这个值才响应事件
- edge : boolean类型,是否设置响应事件的边界,默认是false,没有边界,滑动任何地方都有响应
- edgeSize : 边界的大小占屏幕的百分比,0-1f ,这时要看positon的方向,比如position是left,edgeSize是0.2f,意思就是边界的大小等于距离屏幕左边界占屏幕20%的大小
Slidr应用
Slidr的使用很简单,但需要注意的是他的滑动事件是最高级的,能抢夺一切事件,这时如果我们的项目中有ViewPager
或者RecyclerView
,他们的滑动事件都被抢夺走了 ,如果这样使用,我们滑动时都会退出当前的Activity,如果我们要处理事件,感觉非常的麻烦,这时我们为Slidr
设置config来控制他的响应事件,比如控制速度,手指滑动的距离才来响应Slidr
事件,我写了两个demo,都是用edgeSize
来控制的,
ViewPagerDemo效果图
配置代码
private void initSlidr() {
SlidrConfig config=new SlidrConfig.Builder()
.position(SlidrPosition.LEFT)//滑动起始方向
.edge(true)
.edgeSize(0.18f)//距离左边界占屏幕大小的18%
.build();
Slidr.attach(this,config);
}
RecyclerViewDemo效果图
配置代码
private void initSlidr() {
SlidrConfig config=new SlidrConfig.Builder()
.position(SlidrPosition.TOP)//滑动起始方向
.edge(true)
.edgeSize(0.3f)//边界占屏幕大小30%
.build();
Slidr.attach(this,config);
}
后语
Slidr的使用很简单,而且实现的效果也很棒,不影响原来Activity的生命周期,我比较喜欢,在我们的使用过程中,可以使Activity滑动退出的方向和Activity进场的方向动画设置相反的方向,这样体验也比较好,看我的gif图也做了这样的效果,同时也可以研究一下5.0之后Activity的转场动画配合Slidr使用,效果更佳,上面第二张gif图用的就是5.0之后的动画,写这篇博客也是本着推荐的态度,大家快引用到你们的项目之中吧!!