写一个丝滑的滑动解锁控件?
写该控件的背景是,在一次面试过程中,体验招聘方的产品,发现滑动解锁效果并不理想,gitbub搜索页没有相关开源控件,于是面试结束后,决定自己撸一个滑动解锁控件。
源码地址
效果预览
支持功能
- 支持配置背景颜色、圆角大小
- 支持背景跟随滑动距离伸缩
- 支持配置滑块为圆形/方形
- 支持配置滑块背景颜色、图标、内边距
- 支持字体颜色、大小、流光效果配置
- 支持iOS风格配置
- 支持配置滑块显示文字/图片
依赖
- 添加maven仓库配置到项目根目录gradle文件下
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
- 添加以下maven依赖配置到app模块,gradle文件下
implementation 'com.github.Leo199206:SlideUnlock:1.0.3'
添加到布局
<com.slide.unlock.view.SlideUnlockView
android:id="@+id/slide_style3"
android:layout_width="250dp"
android:layout_height="50dp"
android:layout_marginTop="20dp"
android:padding="2dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/slide_style2"
app:resilienceDuration="500"
app:thumbBgColor="#ED3939"
app:thumbPadding="8dp"
app:thumbShape="CIRCLE"
app:thumbText="关机"
app:thumbTextStyle="BOLD"
app:thumbTint="@color/white"
app:thumbType="TEXT"
app:thumbWidth="60dp"
app:trackBgColor="#64000000"
app:trackRoundCorner="50dp"
app:unlockLockText="滑动以关机"
app:unlockLockTextColor="@color/black"
app:unlockLockTextSize="16sp"
app:unlockLockTextStyle="DEFAULT" />
<com.slide.unlock.view.FlexibleTrackSlideUnlockView
android:id="@+id/slide_style8"
android:layout_width="250dp"
android:layout_height="50dp"
android:layout_marginTop="20dp"
android:padding="2dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/slide_style7"
app:resilienceDuration="500"
app:shineEffect="true"
app:thumbBgColor="#ED3939"
app:thumbPadding="8dp"
app:thumbShape="SQUARE"
app:thumbText="解锁"
app:thumbTextStyle="BOLD"
app:thumbTint="@color/white"
app:thumbType="TEXT"
app:thumbWidth="60dp"
app:trackBgColor="#64000000"
app:trackRoundCorner="50dp"
app:unlockLockText="滑动以解锁"
app:unlockLockTextColor="@color/black"
app:unlockLockTextSize="16sp"
app:unlockLockTextStyle="DEFAULT" />
<com.slide.unlock.view.FlexibleThumbSlideUnlockView
android:id="@+id/slide_style12"
android:layout_width="250dp"
android:layout_height="50dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:padding="2dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/slide_style11"
app:resilienceDuration="500"
app:thumbBgColor="#ED3939"
app:thumbDrawable="@drawable/ic_shutdown"
app:thumbPadding="8dp"
app:thumbShape="CIRCLE"
app:thumbTextStyle="BOLD"
app:thumbTint="@color/white"
app:thumbType="DRAWABLE"
app:thumbWidth="60dp"
app:trackBgColor="#64000000"
app:trackRoundCorner="50dp"
app:unlockLockText="滑动以关机"
app:unlockLockTextColor="@color/black"
app:unlockLockTextSize="16sp"
app:unlockLockTextStyle="DEFAULT" />
- 代码配置
lockView.setSlideUnlockCallback(object: OnSlideUnlockCallback{
override fun onSlideUnlockComplete(view: SlideUnlockView) {
//解锁成功回调方法
}
override fun onSlideUnlockProgress(view: SlideUnlockView, progress: Float) {
//解锁进度回调0.0~1.0
}
})
已定义样式属性
| 属性 | 说明 |
|---|---|
| trackBgColor | 背景颜色 |
| trackRoundCorner | 背景圆角大小 |
| thumbBgColor | 滑块背景颜色 |
| thumbPadding | 滑块内边距 |
| thumbTint | 滑块内容着色颜色 |
| thumbDrawable | 滑块内容图片,仅在thumbType为DRAWABLE时有效 |
| thumbWidth | 滑块宽度,仅方形滑块有效,圆形滑块宽高默认为去除内边距的控件高度 |
| thumbText | 滑块中心内容文字,仅在thumbType为TEXT时有效 |
| thumbTextStyle | 滑块文字风格,DEFAULT为默认风格,BOLD为粗体 |
| thumbType | 滑块内容类型,TEXT为文字,DRAWABLE为图片 |
| thumbShape | 滑块形状,CIRCLE为圆形,SQUARE为方形 |
| resilienceDuration | 取消解锁,滑块回弹动画时长 |
| unlockLockText | 解锁提示 |
| unlockLockTextSize | 解锁提示文字大小 |
| unlockLockTextColor | 解锁提示文字颜色 |
| unlockLockTextShineColor | 解锁提示文字,流光效果颜色,仅在shineEffect为true时生效 |
| unlockLockTextStyle | 解锁提示文字风格,DEFAULT为默认风格,BOLD为粗体 |
| shineDuration | 解锁提示文字流光效果,动画时长 |
| shineEffect | 是否开启解锁提示文字流光效果 |