写一个丝滑的滑动解锁控件?

939 阅读2分钟

写一个丝滑的滑动解锁控件?

写该控件的背景是,在一次面试过程中,体验招聘方的产品,发现滑动解锁效果并不理想,gitbub搜索页没有相关开源控件,于是面试结束后,决定自己撸一个滑动解锁控件。

源码地址

SlideUnlock

效果预览

支持功能

  • 支持配置背景颜色、圆角大小
  • 支持背景跟随滑动距离伸缩
  • 支持配置滑块为圆形/方形
  • 支持配置滑块背景颜色、图标、内边距
  • 支持字体颜色、大小、流光效果配置
  • 支持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是否开启解锁提示文字流光效果