Android 自定义View实现拖动滑块完成验证

article/2025/11/9 7:58:56

本文较长,阅读大约十分钟

此效果源自于星球的星友的提问:

640?wx_fmt=png      

周末忙里偷闲把效果实现了一下,其实这个效果一般都是在Web上的验证,手机App多半还是短信验证码等方式,或者WebView加载的JS中的效果,不过要自定义View一下,这里我以我的思路来写一个自定义View,不过重在思路哈,不想写开源,很多的细节也就没注意,首先我们分析一下这个验证码的组成部分

1.背景图

2.空缺图

3.移动图

4.成功提示

5.滑块进度条

那么我们首先创建一个View叫做PictureV,先来绘制背景吧;

640?wx_fmt=jpeg      

这里我先加载了一张图片作为mBitmap,然后创建了控件宽高大小一致的bgBitmap,让mBitmap填充在bgBitmap上,这是因为我们并不确认一张图片的大小到底是多少,所以通过createBitmap创建与View等宽高的画布,最后将bgBitmap绘制在View上,显示的结果如下:

640?wx_fmt=png      

然后,我们开始绘制空缺的图片,这里我随便找了一个小方块来进行绘制,看代码:

640?wx_fmt=jpeg      

绘制空的方块只需要加载一张图片绘制出来就好了,这里我通过获得nullBitmap的宽度来作为小方块的高宽,因为我的实现是正方形的,其次计算了他默认出现的地方,也就是LINE_W,LINE_H,当然,你也可以动态随机,这个也是同理,运行一下:

640?wx_fmt=png      

可以看到方块了,那么我们现在还得绘制一块移动的方块并且截取空白方块的位置,代码如下:

640?wx_fmt=jpeg      

由于移动的方块是需要截取空白处的,所以我们还是利用了createBitmap创建一个新的位图,他的高宽就是我们的空白块高宽,并且他的大小是我们之前绘制空白块的宽度,也就是CARD_SIZE,这里要注意的是我们绘制位图的时候x轴,也就是平行线需要使用一个变量来表示,等一下滑动的时候要动态修改的,来看下效果:

640?wx_fmt=png      

这个效果看起来还是不错的,我们现在需要其实可以处理滑动事件了,因为我们这个案例是支持手势滑动的,来看下Touch的代码:

640?wx_fmt=jpeg      

这个方法中不仅处理了滑动事件,也处理了计时的任务,我们在按下的时候开始计时,当抬起的时候则关闭计时,这个时候就知道你移动一次所需要的时间,方便我们绘制结果提示,接着来看move方法吧,首先我们的拖动不能超过屏幕左右侧,所以我们左侧直接大于0,右侧的话则需要屏幕宽度减去方块大小,才赋值给moveX,然后刷新一下View就可以看到效果了,我们来看下Gif图片:

640?wx_fmt=gif      

当然,MOVE处理移动,那么UP就要处理结果了,我需要知道你到底成功了没有,那么我们可以看到,在UP中,我们首先先remove掉计时器,不管你成功与否,这一次的计时算是结束了,然后我们判断你的移动块是否在空白块的位置,也就是LINE_W和LINE_H,这里我设置了一个errorValue 误差值,防止一些手残党对不准,当位置吻合,说明移动成功了,那我们通过接口通知外部调用对象,并且这里有一个变量isSucceed设置为true再刷新,是为了onDraw里的绘制成功提示:

640?wx_fmt=png      

moveTime就是我们计算的时间了,来看下drawSucceedText这个方法:

640?wx_fmt=jpeg      

这里绘制了两部分,一个是背景一个是文字,背景直接RectF,至于他的位置,我们是放在底部,所以mHeight减去我们希望的高度即可,然后文本就比较麻烦了,因为我们要绘制居中,通过测量得出baseY,文本绘制居中这个可以参考资料或者网上一些人的讲解

640?wx_fmt=png      

这样就可以实现绘制的文本居中了,然后我们运行看下效果

640?wx_fmt=png      

到这里看起来效果还是不错的,不过我们还有一个滑动进度条要实现,本来正常来讲,直接绘制得了,直接绘制一个进度,一个滑块,根据滑动来实现拖动进度,不过这里我直接偷懒吧,使用进度条来实现,嘎嘎~~

那要怎么做呢?首先新增一个SeekBar

640?wx_fmt=jpeg      

然后PictureV新增一个接口,对外输出值,输出两个值,一个是最大值,一个是当前进度

640?wx_fmt=png      

而我们默认的当前值是moveX,而最大值则是宽度减去方块大小,接着需要新增一个对外调用的方法updateX

640?wx_fmt=png      

这个方法是提供给外部调用的,和我们的滑动事件是一样的,处理好moveX的赋值以及对成功与否的判断即可,来看下MainActivity中的调用:

640?wx_fmt=jpeg      

来看下运行效果:

640?wx_fmt=png      

这里的时间其实是没有计算到的因为没有在ACTION_DOWN中开始计时,不过本来就是偷懒的,这个小细节也懒得管了,最后放上PictureV的全部代码:

640?wx_fmt=jpeg      

最后运行一个Gif:

640?wx_fmt=gif      

大体的实现思路是如此,也并没有进行封装处理,只是想告诉同学们一种实现方式,当然,要想做到图片上的那个效果,还需要进行细化,可以根据这个View自己去魔改一下即可,思路 > Demo

Demo下载地址:

https://pan.baidu.com/s/19sDesmsGyZJfsj0Xm3U96g

提取码:w0iw

有兴趣的可以加入我的知识星球哦,只要点击阅读原文即可哦~

关于知识星球的介绍可以在公众号点击右下角的【和我学习】或者公众号发送【Hi Android】【知识星球】都可以


http://chatgpt.dhexx.cn/article/Pfd8rZJT.shtml

相关文章

android原生滑块验证

记录一个滑块验证,在文章底部会放上DEMO 简单效果图 1、滑动验证前 2、滑动验证后 用到两个类: 一、自定义类代码 public class ImageAuthenticationView extends android.support.v7.widget.AppCompatImageView {/*** 定义画笔*/private Paint mPai…

小程序 拖动滑块验证(自定义组件 插件分享)

效果图: 文章目录: #1 创建组件 #2 组件编码 MoveVerify.wxss MoveVerify.wxml MoveVerify.js #3 页面引用 在页面的 json 文件中引用组件 在页面的 wxml 文件中使用组件 在页面的 js 文件中接收验证回调 #1 创建组件 在小程序项目根目录创建目…

jQuery拖动滑块验证样式

样式&#xff1a; 目录结构&#xff1a; HTML代码&#xff1a; <!DOCTYPE html> <html><head><title>jQuery仿淘宝网拖动滑块验证码代码</title><meta charset"utf-8"><link href"css/drag.css" rel"stylesh…

css3 滑动验证,Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)

vue验证滑块功能&#xff0c;在生活中很多地方都可以见到&#xff0c;那么使用起来非常方便&#xff0c;基于vue如何实现滑块验证呢&#xff1f;下面通过代码给大家讲解。 效果图如下所示&#xff1a; 拖动前 拖动后 代码引用的css与js都是线上的 将代码全部复制到一个html中可…

JavaScript实现拖动滑块验证

Write By Monkeyfly 以下内容均为原创&#xff0c;如需转载请注明出处。 前提 之前在优化别人写的登录界面时&#xff0c;遇到了滑动解锁成功后发送短信验证码的场景&#xff0c;因为涉及到改动&#xff0c;所以必须要明白它是怎么实现的。由于本人JavaScript技艺不精&#…

JavaScript实现拖动滑块验证(方法已封装)

前提 之前写了一篇博文&#xff0c;题目是《JavaScript实现拖动滑块验证》&#xff0c;里面都是用最简单的方式实现的。后来&#xff0c;群里大神推荐了一款unlock.js插件&#xff0c;称作幻灯片解锁插件。在这里附上它的github地址&#xff1a;https://github.com/menthe/unl…

JavaScript封装拖动滑块验证

原生JS封装拖动验证滑块 最终效果分析最终如何使用&#xff1f;编写库的整体初始框架编写核心函数1(创建dom和css)编写核心函数2(绑定事件)添加工具方法(核心函数2中用到的) 最终完整可运行代码使用 最终效果 分析 看到这个效果我们首先应该想到和拖动有关的api: onmousedown, …

vue拖动滑块验证组件

组件Slider.vue <template><div class"drag" ref"dragDiv"><div class"drag_bg"></div><div class"drag_text">{{ confirmWords }}</div><div ref"moveDiv" mousedown"moused…

js实现拖动滑块验证

介绍一个比较6的网站&#xff1a;Element.setPointerCapture() - Web API 接口参考 | MDN 里面用到的setPointerCapture&#xff0c;getBoundingClientRect方法都是这个网站里面有的 &#xff08;看看效果图&#xff0c;动态图我不知道怎么搞&#xff0c;简单来说就是没拉到底…

php拖动滑块验证原理,原生js实现拖动滑块验证

原生js实现拖动滑块验证题 前言 验证的目的是为了减轻超高数据量的访问时,服务器的压力,减少同时请求量;前端基本都不能避免与验证打交道,这里记录一下我对于滑块验证的学习过程。 思路 作为前端,我们要将自己带入用户的角度,对用户的操作习惯进行考虑,我将拖动滑块验证…

Vue - 滑块拖动拼图验证(滑块验证安全检测)

前言 😃 提供您一个示例,您可以轻松移植到您项目中。 您一定见过很多系统都 “配备” 了滑块验证、拼图验证、找不同等, 本质上都是为了验证登录系统的是人还是机器(代码), 如下图所示效果:

Uipath实现简单的滑块拖动验证

本篇文章主要介绍使用【Click】Activities这一个活动来实现拖动滑块的验证&#xff0c;为拖动滑块验证提供了一种思路。但只能应用于滑块从头滑到尾&#xff0c;不支持拼图的滑块验证。 说白了&#xff0c;这篇文章更像是介绍【Click】这个Activities中&#xff0c;"clic…

数据库技术与应用 学习笔记1

1.软件的安装 SQL Server 2019 安装教程 大佬的安装教程链接: https://blog.csdn.net/CHQC388/article/details/104550963. 2.数据库技术与应用 2.1 什么是数据库技术 数据库技术所研究的问题就是如何科学地组织和存储数据&#xff0c;如何高效地获取和处理数据。 2.2 什么…

SQL Server数据库笔记整理(一)

数据库&#xff1a;持久化存储&#xff0c;优化读写&#xff0c;保证数据的有效性。 关系型数据库是基于E-R模型&#xff08;即实体-模型&#xff09;&#xff0c;使用SQL语言进行操作。数据库分类&#xff1a;文档型数据库、服务型数据库&#xff08;使用居多&#xff09; &am…

软件测试工程师学习笔记11 - 数据库篇

软件测试工程师学习笔记 -11 一、入门必读二、Linux三、数据库1.MySQL基础1&#xff09; sql语言的注释2&#xff09;mysql中常用数据类型3&#xff09;表、字段、记录4&#xff09;数据库中的常用命令4&#xff09;字段的约束5&#xff09;总结 一、入门必读 二、Linux 三、…

计算机三级 数据库技术 学习笔记

版权声明&#xff1a;本文为CSDN博主「RanLZ」的原创文章&#xff0c;转载请附上原文出处链接。 计算机三级 数据库技术 第一章 数据库应用系统开发方法 1.1 数据库应用系统生命周期 1.1.1 软件工程与软件开发方法 瀑布模型快速原型模型螺旋模型 1.1.2 DBAS生命周期模型 p …

数据库系统概论复习笔记

Ch1 绪论 1.1 基本概念 数据Data、数据库DB、数据库管理系统DBMS、数据库系统DBS 数据是数据库中存储的基本对象,是用来描述事物的符号。数据库是长期储存在计算机内的、有组织的、可共享的、大量数据的集合。数据库管理系统位于用户与操作系统之间的一层数据管理软件,用于…

数据库系统概论学习笔记(1)

数据库系统第一章 目录 数据库系统第一章1. 绪论1.1 数据库系统概述1.2 数据(Data)图解注意点例子 1.3 数据库(DataBase)注意点1.4 数据库管理系统(DateBase Management System DBMS)1.5 数据库系统(DateBase System,DBS)1.6 数据库管理的三个阶段 1. 绪论 1.1 数据库系统概述…

软件工程学习笔记

其他 【专栏必读】王道考研408操作系统万字笔记&#xff08;有了它不需要你再做笔记了&#xff09;&#xff1a;各章节内容概述导航和思维导图 【专栏必读】王道考研408数据结构万字笔记&#xff08;有了它不需要你再做笔记了&#xff09;&#xff1a;各章节内容概述导航和思维…

数据库原理第七章笔记

一、 数据库设计概述 数据库设计&#xff0c;广义的讲是数据库及其应用系统的设计&#xff0c;即整个数据库应用系统。狭义的讲是设计数据库本身&#xff0c;即设计数据库的各级模式并建立数据库&#xff0c;也是数据库应用系统设计的一部分。 数据库设计是指对于一个给定的应…