在前面仿华为加载动画、仿网易音乐听歌识曲-麦克风动画中,我们通过绘图的基础知识完成了简单的绘制。在本例中,我们将绘制常见的验证码。
一、效果图
二、知识点与思路分析
通过上面的效果图观察,我们可以看到里面有绘制的随机线条,随机绘制的验证码。
绘制线条,直线或曲线
绘制文本,生成的验证码文本的绘制
绘制圆点。
三、代码编写
public class IdentifyCodeUtil { private static final int CODE_NUMBER = 4; private static final int LINE_NUMBER = 5; private static final int POINT_NUMBER = 10; private StringBuffer stringBuffer = null; private Random random = new Random(); //随机数数组 private static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; private static IdentifyCodeUtil instance; public static IdentifyCodeUtil getInstance(){ if(instance == null){ instance = new IdentifyCodeUtil(); } return instance; } public Bitmap createBitmapCode(int width, int height){ Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.drawColor(Color.LTGRAY); drawCodeText(canvas, width, height); drawLines(canvas, width, height); drawPoint(canvas, width, height); return bitmap; } public String getIdentifyCode(){ if(stringBuffer == null){ return ""; } return stringBuffer.toString(); } private String buildIdentifyCode(){ StringBuffer stringBuffer = new StringBuffer(); for(int i=0; i < CODE_NUMBER;i++){ stringBuffer.append(CHARS[random.nextInt(CHARS.length)]); } Log.d("Code",stringBuffer.toString()); return stringBuffer.toString(); } private void drawCodeText(Canvas canvas,int width, int height){ Paint paint = new Paint(); paint.setTextSize(50); String text = buildIdentifyCode(); float textLength = paint.measureText(text); int startMaxLength = (int) ((width - textLength) / 2); int startPosition = random.nextInt(startMaxLength); //绘制文字 for(int index = 0; index < text.length(); index++){ int offsetDegree = random.nextInt(15); offsetDegree = random.nextInt(2) == 1 ? offsetDegree : -offsetDegree; canvas.save(); //设置旋转 canvas.rotate(offsetDegree, width / 2, height / 2); paint.setARGB(255, random.nextInt(200) + 20, random.nextInt(200) + 20, random.nextInt(200) + 20); char tempChar = text.charAt(index); //给画笔设置随机颜色 canvas.drawText(String.valueOf(tempChar), startPosition +index * textLength / text.length() +15, height * 3 / 5f,paint); canvas.restore(); } } private void drawLines(Canvas canvas,int width, int height){ Paint paint = new Paint(); paint.setStrokeWidth(3); for(int i = 0;i < LINE_NUMBER;i++){ paint.setARGB(255, random.nextInt(200) + 30, random.nextInt(200) + 30, random.nextInt(200) + 30); int startX = random.nextInt(width); int startY = random.nextInt(height); int endX = random.nextInt(width); int endY = random.nextInt(height); canvas.drawLine(startX, startY, endX, endY, paint); } } private void drawPoint(Canvas canvas, int width, int height) { Paint paint = new Paint(); paint.setStrokeWidth(3); paint.setColor(Color.GRAY); for(int i=0; i< POINT_NUMBER; i++){ PointF pointF = new PointF(random.nextInt(width) + 10, random.nextInt(height) + 10); canvas.drawPoint(pointF.x, pointF.y, paint); } }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- Java 中深拷贝与数据库持久化之间存在怎样的关系?(Java深拷贝与数据库持久化的关系)
- Java 中 Arrays 类的常用方法有哪些?(java中arrays类的方法有哪些)
- 在 Java 中遇到“无法解析为类型”的问题该如何解决?(java中无法解析为类型怎么解决)
- Java Thread 类的构造方法究竟是什么?(java thread类的构造方法是什么)
- Java 中 int 数组如何实现拷贝?(java int数组拷贝怎么实现)
- Java FX 在可访问性方面都有哪些重要的考虑呢?(java javafx在可访问性方面有哪些考虑 )
- Java 的 domain 具体有哪些合法的格式呢?(Java的domain有哪些合法格式)
- Java 中 shuffle 函数的参数该如何设置?(Java中shuffle函数的参数设置)
- Java 重构到底有哪些作用呢?(Java重构有什么用)
- 在 Java 中如何利用 Vector 来定义二维数组?(java中怎么用vector定义二维数组)
猜你喜欢
AI推送时光机Android绘制验证码的实例代码
后端开发2023-05-31
jquery canvas绘制图片验证码实例
后端开发2024-04-02
Android字段验证的实例代码
后端开发2022-06-06
Android实现绘制LocationMarkerView图的示例代码
后端开发2023-02-10
Android 验证码功能实现代码
后端开发2022-06-06
Android绘制平移动画的示例代码
后端开发2024-04-02
Java实现滑动验证码的示例代码
后端开发2024-04-02
Python实现身份证号码验证的示例代码
后端开发2024-04-02
python django 实现验证码的功能实例代码
后端开发2022-06-04
Android实现自定义验证码输入框效果(实例代码)
后端开发2022-06-06
Java实现短信验证码的示例代码
后端开发2024-04-02
Python实现绘制凸包的示例代码
后端开发2023-05-18
Android实现绘制折线图APP代码
后端开发2024-04-02
python中Matplotlib绘制直线的实例代码
后端开发2022-06-02
Android利用Flutter path绘制粽子的示例代码
后端开发2022-06-07
java随机验证码生成实现实例代码
后端开发2023-05-31
Ajax实现邮箱验证实例代码
后端开发2024-04-02
Python matplotlib绘制散点图的实例代码
后端开发2024-04-02
C#实现绘制鼠标的示例代码
后端开发2022-12-23
咦!没有更多了?去看看其它编程学习网 内容吧