# Captcha **Repository Path**: chinasoft_ohos/Captcha ## Basic Information - **Project Name**: Captcha - **Description**: 滑块拼图验证码控件 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 2 - **Created**: 2021-04-12 - **Last Updated**: 2022-09-06 ## Categories & Tags **Categories**: harmonyos-captcha **Tags**: None ## README # Captcha #### 项目介绍 - 项目名称:滑块拼图验证码控件 - 所属系列:openharmony的第三方组件适配移植 - 功能:滑块拼图验证码控件 - 项目移植状态:主功能完成,滑块效果有差异 - 调用差异:无 - 开发版本:sdk6,DevEco Studio2.2 Beta1 - 基线版本: Release 1.12 #### 效果演示 #### 安装教程 1.在项目根目录下的build.gradle文件中, ``` allprojects { repositories { maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' } } } ``` 2.在entry模块的build.gradle文件中, ``` dependencies { implementation('com.gitee.chinasoft_ohos:captcha:1.0.2') ...... } ``` 在sdk6,DevEco Studio2.2 Beta1下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 #### 使用说明 组件主要由Img控件和Slider控件组成。 1.将Captcha添加至布局 ```xml ``` 2.添加Java代码 ```Java captcha = (Captcha) findComponentById(ResourceTable.Id_captCha); captcha.setCaptchaListener(new Captcha.CaptchaListener() { @Override public String onAccess(long time) { new ToastDialog(getContext()) .setText( "验证成功") .show(); return "验证通过";            } @Override public String onFailed(int failedCount) { new ToastDialog(getContext()) .setText( "验证失败,失败次数"+ count) .show(); return "验证失败"; } @Override public String onMaxFailed() { new ToastDialog(getContext()) .setText( "验证超过次数,你的帐号被封锁") .show(); return "验证超过次数,你的帐号被封锁";            } }); ``` 4.(可选)自定义拼图样式
1)编写策略类,继承CaptchaStrategy类,重写策略方法,具体可参考DefaultCaptchaStrategy类 ```Java public abstract class CaptchaStrategy { protected Context mContext; public CaptchaStrategy(Context ctx) { this.mContext = ctx; } protected Context getContext() { return mContext; } /** * 定义拼图缺块的形状 * * @param blockSize 单位dp,注意转化为px,缺块的大小,注意Path的边界不要超出此大小 * @return path of the shape */ public abstract Path getBlockShape(int blockSize); /** * 根据整张拼图的宽高和拼图缺块大小定义拼图缺块的位置 * * @param width picture width * @param height picture height * @return position info of the block */ public abstract PositionInfo getBlockPostionInfo(int width, int height, int blockSize); /**     * 定义滑块图片的位置信息(只有设置为无滑动条模式有用并建议重写)   * * @param width picture width * @param height picture height * @return position info of the block */ public PositionInfo getPositionInfoForSwipeBlock(int width, int height, int blockSize){ return getBlockPostionInfo(width,height,blockSize); } /** * 定义拼图缺失部分阴影的Paint */ public abstract Paint getBlockShadowPaint(); /** * 获得拼图缺块图片的Paint */ public abstract Paint getBlockBitmapPaint(); /** * 装饰滑块图片,在绘制图片后执行,即绘制滑块前景 * @params canvas * @params shape 缺块的形状 */ public void decoreateSwipeBlockBitmap(Canvas canvas, Path shape) { } } ``` 2)添加Java代码 ```Java captCha.setCaptchaStrategy(new XXXCaptchaStrategy(context)); ``` 5.(可选)自定义滑块条   与Slider自定义样式一样 ```xml ``` ```Java captcha.setSeekBarStyle(ResourceTable.Graphic_po_seekbar,ResourceTable.Graphic_thumb); ``` #### 测试信息 CodeCheck代码测试无异常 CloudTest代码测试无异常 病毒安全检测通过 当前版本demo功能与原组件基本无差异 #### 版本迭代 - 1.0.2