移动端获取图形验证码有两种形式,一种是在本地随机生成进行验证,另一种是根据服务端返回的图片流设置到页面上,今天我们要做的就是根据服务端返回的操作图形验证码,完整demo地址:https://download.csdn.net/download/lou_liang/10421144          下面看一张图:

demo中是一个底部弹出的dialog工具类,结合服务端返回的图片流显示出来。

首先自定义Dialog工具类,代码中包含点击确定按钮的接口回调部分,主要是为了根据服务器返回的图片验证码,在输入框中输入验证码,接着将输入的数字再传给服务器,以此判断是否输入验证码正确

public class PictureDialog {public interface  onListener{void OnListener(String msg);
    }private static onListener listeners;
    public void setListener(onListener listener){this.listeners = listener;
    }public static class Builder {private Context mContext;
        private Dialog mDialog;
        private ViewHolder mViewHolder;
        private View mView;
        public Builder(Context context) {mContext = context;
            initView();
        }public Builder setContent(String img){Glide.with(mContext).load(img).asBitmap().into(mViewHolder.ivPic);
            return this;
        }public Builder setPositiveButton(CharSequence sure, final View.OnClickListener listener) {mViewHolder.tvPositiveButton.setText(sure);

            mViewHolder.tvPositiveButton.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View view) {if(TextUtils.isEmpty(mViewHolder.normalMessage.getText().toString())){Toast.makeText(mContext,"验证码不能为空",Toast.LENGTH_LONG).show();
                    }else {mDialog.dismiss();
                        if (listener != null) {listener.onClick(view);
                        }if(listeners != null){listeners.OnListener(mViewHolder.normalMessage.getText().toString());
                        }}}});
            return this;
        }public Builder setNegativeButton(CharSequence text, final View.OnClickListener listener) {mViewHolder.tvNegativeButton.setText(text);
            mViewHolder.tvNegativeButton.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View view) {mDialog.dismiss();
                    if (listener != null) {listener.onClick(view);
                    }}});
            return this;
        }public void show() {if (mDialog != null) {mDialog.show();
            }}public void dismiss() {if (mDialog != null) {mDialog.dismiss();
            }}private void initView() {mDialog = new Dialog(mContext,DialogUtils.getStyle());
            mView = LayoutInflater.from(mContext).inflate(R.layout.normal_dialog, null);
            mViewHolder = new ViewHolder(mView);
            mDialog.setContentView(mView);
            mDialog.getWindow().setGravity(Gravity.BOTTOM);
            DisplayMetrics dm = new DisplayMetrics();
            WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
            windowManager.getDefaultDisplay().getMetrics(dm);
            WindowManager.LayoutParams lp = mDialog.getWindow().getAttributes();
            lp.width = (int) (dm.widthPixels * 335.0 / 360.0);
            mDialog.getWindow().setAttributes(lp);
        }class ViewHolder {ImageView ivPic;
            EditText normalMessage;
            TextView tvNegativeButton;
            TextView tvPositiveButton;
            public ViewHolder(View view) {ivPic = (ImageView) view.findViewById(R.id.iv_pic);                   //图形验证码
                normalMessage = (EditText) view.findViewById(R.id.dialog_normal_message);//输入内容
                tvNegativeButton = (TextView) view.findViewById(R.id.dialog_negative);  //取消
                tvPositiveButton = (TextView) view.findViewById(R.id.dialog_positive);   //确定
            }}}
}

最后在MainActivity中点击加载按钮调用dialog:其中要注意filePath代表的图片流要根据大家自己服务器返回的来取,我这里是内网,其他人获取不到。

btn.setOnClickListener(new View.OnClickListener() {@Override
    public void onClick(View v) {final PictureDialog.Builder builder1 = new PictureDialog.Builder(MainActivity.this);
        //二进制图片流根据服务端返回的来取
        String filePath ="http://192.168.6.51:36030/m/passport/register/getCaptcha.jpg?smsStoken=captcha_stoken_9e56b995c197458e9d6452851de01631";
        builder1.setContent(filePath);
        builder1.setPositiveButton( "确定", new View.OnClickListener() {@Override
            public void onClick(View v) {PictureDialog pictureDialog = new PictureDialog();
                pictureDialog.setListener(new PictureDialog.onListener() {@Override
                    public void OnListener( String msg) {//此text为输入的验证码,提交到服务器判断输入的验证码是否正确
                        String text = msg;
                        builder1.dismiss();
                    }});
            }}).setNegativeButton("取消", new View.OnClickListener() {@Override
            public void onClick(View v) {builder1.dismiss();
            }}).show();
    }
});

到这里,图形验证码dialog工具类就写好了,希望对大家有帮助,谢谢。附上源码demo:https://download.csdn.net/download/lou_liang/10421144

Android图形验证码工具类相关推荐

  1. java生成验证码工具类_Java生成图形验证码工具类

    生成验证码效果 validatecode.java 验证码生成类 package cn.dsna.util.images; import java.awt.color; import java.awt ...

  2. Android图形验证码

    1. 前言 图形验证码可以让服务器以图片的形式传给客户端,也可以让客户端自己实现.那客户端要怎么做呢?其实很简单,可以使用Android的Canvas.Paint和Random来实现.用Random来 ...

  3. Android常用的工具类

    2019独角兽企业重金招聘Python工程师标准>>> 最新最准确内容建议直接访问原文:Android常用的工具类 主要介绍总结的Android开发中常用的工具类,大部分同样适用于J ...

  4. Android使用的工具类

    Android实用的工具类 https://github.com/AbrahamCaiJin/CommonUtilLibrary#获取app应用版本信息--appapplicationmgr

  5. 退出整个Android程序的工具类

    在实际的Android开发过程中常常有退出整个Android程序的需求,下面给大家介绍一下如何编写一个退出整个Android程序的工具类 package com.superGao.exitApp; i ...

  6. Android软键盘工具类

    Android软键盘工具类 public class SoftKeyboardUtils {/*** 隐藏或显示软键盘* 如果现在是显示调用后则隐藏 反之则显示*/public static void ...

  7. android 单位转换工具,Android单位转换工具类

    Android单位转换工具类 Android单位转换工具类主要由以下4部分构成 1.这个类不能被初始化 2.dip转px接口 3.sp转px接口 4.px转dip接口 代码如下: import and ...

  8. Android 图片处理工具类封装2

    http://www.2cto.com/kf/201312/263638.html Android 图片处理工具类封装 2013-12-10     0个评论   来源:Wiker Yong 的专栏  ...

  9. 邮箱发送验证码工具类

    1.邮箱支持引入到pom <dependency><groupId>org.springframework.boot</groupId><artifactId ...

最新文章

  1. Java基础班学习笔记(15)GUI图形界面编程
  2. Leetcode 153. 寻找旋转排序数组中的最小值 解题思路及C++实现
  3. 一个简单可参考的API网关架构设计
  4. 特征图注意力_向往的GAT(图注意力模型)
  5. (转)静态变量和全局变量的区别
  6. Ext入门学习系列(二)弹出窗体
  7. 用HTML制作个人简历
  8. 现代心理与教育统计学 第一章
  9. javase2021最强学习线路没有之一
  10. Skleran-线性模型-普通最小二乘法-LinearRegression
  11. Django_使用class写views
  12. Flashplayer11 And AIR3游戏应用介绍视频
  13. 运动控制算法c语言,VC平台下机器人虚拟运动控制及3D运动仿真的有效实现方法...
  14. 计算机网络 华南理工大学期末重点 第二章 物理层 谢希仁
  15. 【学习OpenCV4】键盘鼠标操作总结
  16. 小米手环6NFC安装太空人表盘
  17. 联合培养博士经历对于国内就业有优势吗?
  18. 微信小程序商城系列之商品列表页(一)
  19. 一种容易被忽略的盗QQ方法
  20. 引入市场机制 加快我国高等教育的发展

热门文章

  1. 查看电脑开机记录和时间
  2. 机器学习在癌症数据集上的应用实践
  3. SQL查询结果只取一条
  4. Android开发技巧!怒斩获了30家互联网公司offer,大厂直通车!
  5. 你上次被程序猿喷是因为啥?
  6. Linux中在Virtualbox 5.0上安装Windows10
  7. Qt调用海康威视SDK二次开发抓图,录像,停止录像
  8. cas之soo单点登录初步探究
  9. 质量控制中的常见误区(1): Cr=0
  10. 抽样方案介绍问答(转载)