- 浏览: 237561 次
- 性别:
- 来自: 广州
最新评论
-
Janne:
你好 有源代码?可以发到我的邮箱里学学吗?2731049993 ...
achartengine画出动态折线图的效果 -
anbo724:
我的邮箱 anbo724@gmail.com谢谢@
achartengine画出动态折线图的效果 -
anbo724:
你好 请问有源码没《?谢谢
achartengine画出动态折线图的效果 -
weiday123:
额,觉得这个会不会占堆内存?
AdapterView、Adapter优化 -
wen742538485:
为什么没有呢?权限没加还是发创建了给你删了再想创建?是不允许重 ...
Android中为你的应用程序添加桌面快捷方式
http://blog.csdn.net/whumr1/article/details/7092013
不多说了,直接上代码,项目中用到的,未做优化,还有很多参数未设置。
[java] view plaincopy
import java.util.Random;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Bitmap.Config;
public class BPUtil {
private static final char[] CHARS = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', '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', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
};
private static BPUtil bpUtil;
public static BPUtil getInstance() {
if(bpUtil == null)
bpUtil = new BPUtil();
return bpUtil;
}
// width="60" height="30"
// base_padding_left="5"
// range_padding_left="10"
// base_padding_top="15"
// range_padding_top="10"
// codeLength="4"
// line_number="3"
// font_size="20"
//default settings
private static final int DEFAULT_CODE_LENGTH = 4;
private static final int DEFAULT_FONT_SIZE = 20;
private static final int DEFAULT_LINE_NUMBER = 3;
private static final int BASE_PADDING_LEFT = 5, RANGE_PADDING_LEFT = 10, BASE_PADDING_TOP = 15, RANGE_PADDING_TOP = 10;
private static final int DEFAULT_WIDTH = 60, DEFAULT_HEIGHT = 30;
//settings decided by the layout xml
//canvas width and height
private int width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT;
//random word space and pading_top
private int base_padding_left = BASE_PADDING_LEFT, range_padding_left = RANGE_PADDING_LEFT,
base_padding_top = BASE_PADDING_TOP, range_padding_top = RANGE_PADDING_TOP;
//number of chars, lines; font size
private int codeLength = DEFAULT_CODE_LENGTH, line_number = DEFAULT_LINE_NUMBER, font_size = DEFAULT_FONT_SIZE;
//variables
private String code;
private int padding_left, padding_top;
private Random random = new Random();
public Bitmap createBitmap() {
padding_left = 0;
Bitmap bp = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas c = new Canvas(bp);
code = createCode();
c.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setTextSize(font_size);
for (int i = 0; i < code.length(); i++) {
randomTextStyle(paint);
randomPadding();
c.drawText(code.charAt(i) + "", padding_left, padding_top, paint);
}
for (int i = 0; i < line_number; i++) {
drawLine(c, paint);
}
c.save( Canvas.ALL_SAVE_FLAG );//保存
c.restore();//
return bp;
}
public String getCode() {
return code;
}
private String createCode() {
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < codeLength; i++) {
buffer.append(CHARS[random.nextInt(CHARS.length)]);
}
return buffer.toString();
}
private void drawLine(Canvas canvas, Paint paint) {
int color = randomColor();
int startX = random.nextInt(width);
int startY = random.nextInt(height);
int stopX = random.nextInt(width);
int stopY = random.nextInt(height);
paint.setStrokeWidth(1);
paint.setColor(color);
canvas.drawLine(startX, startY, stopX, stopY, paint);
}
private int randomColor() {
return randomColor(1);
}
private int randomColor(int rate) {
int red = random.nextInt(256) / rate;
int green = random.nextInt(256) / rate;
int blue = random.nextInt(256) / rate;
return Color.rgb(red, green, blue);
}
private void randomTextStyle(Paint paint) {
int color = randomColor();
paint.setColor(color);
paint.setFakeBoldText(random.nextBoolean()); //true为粗体,false为非粗体
float skewX = random.nextInt(11) / 10;
skewX = random.nextBoolean() ? skewX : -skewX;
paint.setTextSkewX(skewX); //float类型参数,负数表示右斜,整数左斜
// paint.setUnderlineText(true); //true为下划线,false为非下划线
// paint.setStrikeThruText(true); //true为删除线,false为非删除线
}
private void randomPadding() {
padding_left += base_padding_left + random.nextInt(range_padding_left);
padding_top = base_padding_top + random.nextInt(range_padding_top);
}
}
使用方法
[java] view plaincopy
ImageView imageView = (ImageView)findViewById(R.id.imageView);
imageView.setImageBitmap(BPUtil.getInstance().createBitmap());
不多说了,直接上代码,项目中用到的,未做优化,还有很多参数未设置。
[java] view plaincopy
import java.util.Random;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Bitmap.Config;
public class BPUtil {
private static final char[] CHARS = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', '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', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
};
private static BPUtil bpUtil;
public static BPUtil getInstance() {
if(bpUtil == null)
bpUtil = new BPUtil();
return bpUtil;
}
// width="60" height="30"
// base_padding_left="5"
// range_padding_left="10"
// base_padding_top="15"
// range_padding_top="10"
// codeLength="4"
// line_number="3"
// font_size="20"
//default settings
private static final int DEFAULT_CODE_LENGTH = 4;
private static final int DEFAULT_FONT_SIZE = 20;
private static final int DEFAULT_LINE_NUMBER = 3;
private static final int BASE_PADDING_LEFT = 5, RANGE_PADDING_LEFT = 10, BASE_PADDING_TOP = 15, RANGE_PADDING_TOP = 10;
private static final int DEFAULT_WIDTH = 60, DEFAULT_HEIGHT = 30;
//settings decided by the layout xml
//canvas width and height
private int width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT;
//random word space and pading_top
private int base_padding_left = BASE_PADDING_LEFT, range_padding_left = RANGE_PADDING_LEFT,
base_padding_top = BASE_PADDING_TOP, range_padding_top = RANGE_PADDING_TOP;
//number of chars, lines; font size
private int codeLength = DEFAULT_CODE_LENGTH, line_number = DEFAULT_LINE_NUMBER, font_size = DEFAULT_FONT_SIZE;
//variables
private String code;
private int padding_left, padding_top;
private Random random = new Random();
public Bitmap createBitmap() {
padding_left = 0;
Bitmap bp = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas c = new Canvas(bp);
code = createCode();
c.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setTextSize(font_size);
for (int i = 0; i < code.length(); i++) {
randomTextStyle(paint);
randomPadding();
c.drawText(code.charAt(i) + "", padding_left, padding_top, paint);
}
for (int i = 0; i < line_number; i++) {
drawLine(c, paint);
}
c.save( Canvas.ALL_SAVE_FLAG );//保存
c.restore();//
return bp;
}
public String getCode() {
return code;
}
private String createCode() {
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < codeLength; i++) {
buffer.append(CHARS[random.nextInt(CHARS.length)]);
}
return buffer.toString();
}
private void drawLine(Canvas canvas, Paint paint) {
int color = randomColor();
int startX = random.nextInt(width);
int startY = random.nextInt(height);
int stopX = random.nextInt(width);
int stopY = random.nextInt(height);
paint.setStrokeWidth(1);
paint.setColor(color);
canvas.drawLine(startX, startY, stopX, stopY, paint);
}
private int randomColor() {
return randomColor(1);
}
private int randomColor(int rate) {
int red = random.nextInt(256) / rate;
int green = random.nextInt(256) / rate;
int blue = random.nextInt(256) / rate;
return Color.rgb(red, green, blue);
}
private void randomTextStyle(Paint paint) {
int color = randomColor();
paint.setColor(color);
paint.setFakeBoldText(random.nextBoolean()); //true为粗体,false为非粗体
float skewX = random.nextInt(11) / 10;
skewX = random.nextBoolean() ? skewX : -skewX;
paint.setTextSkewX(skewX); //float类型参数,负数表示右斜,整数左斜
// paint.setUnderlineText(true); //true为下划线,false为非下划线
// paint.setStrikeThruText(true); //true为删除线,false为非删除线
}
private void randomPadding() {
padding_left += base_padding_left + random.nextInt(range_padding_left);
padding_top = base_padding_top + random.nextInt(range_padding_top);
}
}
使用方法
[java] view plaincopy
ImageView imageView = (ImageView)findViewById(R.id.imageView);
imageView.setImageBitmap(BPUtil.getInstance().createBitmap());
发表评论
-
Android Tween动画之RotateAnimation实现图片不停旋转
2012-11-26 22:38 1093本文主要介绍Android中如何使用rotate实现图片不停旋 ... -
Android实现widget定时更新
2012-11-04 20:20 934在开发Android的widget时,第一个需要解决的问题就是 ... -
来自腾讯、谷歌、百度等名企的精选面试五十题
2012-10-07 23:08 942http://www.apkway.com/thread-90 ... -
Android 中Parcelable的作用
2012-09-24 09:53 885android提供了一种新的类型:Parcel。本类被用作封装 ... -
[Android算法] 【eoeAndroid索引】史上最牛最全android开发知识汇总
2012-09-13 09:33 1129http://www.eoeandroid.com/threa ... -
安卓航班推荐70个具有商业实战性的精品Android源码
2012-08-01 00:00 948http://www.apkway.com/thread-58 ... -
Android测试教程汇总
2012-08-02 14:51 1163http://www.apkway.com/thread-67 ... -
Service 与 Thread 的区别
2012-07-26 00:10 927Service 与 Thread 的区别 很多时候,你可能 ... -
android 使用百度地图画轨迹
2012-07-26 00:08 2652import android.content.Context ... -
android百度地图半径画圆
2012-07-26 00:07 2806Java代码 import android.content ... -
Android下获取开机时间
2012-07-26 00:05 1341我的思路是:程序里注册个广播接收器,接收开机启动的广播,当程序 ... -
android 高仿【优酷】圆盘旋转菜单 的实现
2012-07-26 00:03 1373MyAnimation.java Java代码 pack ... -
android 3D 转盘效果(附源码)
2012-07-25 23:41 1818一个仿3D的转盘效果,有倒影特效,旋转图标还可自动放大缩小。由 ... -
Android Thread
2012-07-23 10:47 1075创建新线程的常用方式: 1. 直接使用Thread创建 ... -
Android 通过手说tts中文语音包实现中文朗读
2012-07-22 17:09 1818Android 通过手说tts中文语音包实现中文朗读 ... -
Android 使用HTTPClient调用Web请求(查询手机号码区域)
2012-07-21 00:33 1270Android通过Apache HttpClient调用网上提 ... -
Android+struts2+JSON方式的手机开发
2012-07-21 00:14 1182http://topmanopensource.iteye.c ... -
android九宫格实现
2012-07-21 00:03 1020android九宫格实现,开始以为很复杂,其实只要知道了如何布 ... -
Android ListView圆角实现
2012-07-20 23:59 1229在android上开发项目,如 ... -
Android 将一个Activity转化为View显示出来
2012-07-19 10:27 2100最近看到好多opengl牛人写了些立方体,卷页之类的华丽的代码 ...
相关推荐
Android下使用Canvas生成验证码Bitmap
在Android开发中,生成验证码图片是一项常见的功能,主要用于提高用户安全性,防止机器人或者恶意软件自动登录或注册。验证码图片通常包含一串随机数字或字母,用户需要手动输入以验证他们是真实的人。以下是对这个...
在Android平台上,生成图形验证码(CAPTCHA)是提高应用...综上所述,Android生成图形验证码涉及到图像处理、随机数生成、颜色处理和编码等多个技术领域,实现时需要综合运用这些知识,确保验证码的安全性和可用性。
在Android平台上,本地生成验证码通常涉及以下几个步骤: 1. **生成随机数据**:首先,需要生成一段随机字符串作为验证码的内容。这个字符串可以是数字、字母或者两者的组合,长度可以根据需求设定。 2. **图像...
本项目是基于Android Studio的一个实例,它能够直接返回一个随机生成的验证码Bitmap,便于集成到你的应用程序中。下面我们将深入探讨如何在Android Java环境中实现这个功能。 首先,验证码通常由一组随机字符组成,...
另一种实现方式是通过工具类来生成验证码图片,然后将其显示在ImageView或其他控件中。工具类通常包含一个方法,该方法返回Bitmap对象,这个Bitmap包含了生成的验证码图像。这种方式的优点是解耦,可以独立于UI进行...
在Android应用开发中,生成验证码和二维码是常见的功能,用于增强用户验证的安全性和提供便捷的信息传递方式。这个压缩包文件“Android应用源码--生成验证码和二维码.zip”包含了一个实现这两种功能的示例项目,主要...
在Android应用开发中,滑块验证码控件是一种常见的安全机制,用于验证用户是人类而非机器人。它通过提供一种交互式的验证方式,要求用户手动拖动一个滑块来完成一段图像或拼图,从而防止自动化的恶意操作。这篇文档...
7. **保存验证码**:将绘制好的验证码Bitmap保存到内存或本地,以便后续验证。 8. **点击事件处理**:添加OnClickListener,当用户点击验证码时,可以重新生成验证码并刷新界面。 9. **暴露接口**:为了让外部能够...
本文将深入探讨如何在Android平台上实现随机验证码的功能,以及相关的技术要点。 验证码的核心在于生成难以被算法识别的随机字符串或图像,同时确保用户可以轻松读取并输入。在Android中,我们可以采用两种常见的...
在Android平台上,生成文字图片验证码(通常称为CAPTCHA)...综上所述,Android生成文字图片验证码涉及字符串随机生成、图像处理和安全策略等多个方面。通过合理的代码设计和实现,可以为应用程序提供有效的防护措施。
通过这个DEMO,开发者可以学习到Android验证码的基本实现流程,包括字符生成、图像绘制、用户交互及服务器通信等环节。在实际项目中,可以根据需求调整验证码的复杂度和安全等级,确保应用的安全性。
2. **绘制验证码**:接下来,我们使用Android的`Canvas`和`Paint`对象在`Bitmap`上绘制验证码。可以创建多个字体颜色、大小和样式,以及绘制干扰线和点,增加识别难度。 3. **扭曲图像**:为了进一步防止机器识别,...
在Android开发中,生成验证码图片是一项常见的功能,用于验证用户身份、防止机器人自动操作等场景。本篇文章将详细讲解如何通过一行代码实现Android验证码图片功能,以提高开发效率。 首先,验证码图片通常由随机...
在Android应用开发中,生成随机验证码可能涉及到Java的Math类或Random类,用于生成随机数字或字符。开发者可能使用StringBuilder或StringBuffer来组合这些随机元素,形成最终的验证码字符串。 2. **Android UI设计*...
测试用例通常会包括生成验证码图片、显示图片、比较用户输入与实际验证码的匹配情况等步骤。 实现验证码功能时,我们还需要考虑用户体验。验证码的生成速度应该足够快,以便用户在需要时能够即时获取;同时,验证码...
下面将详细介绍在Android上生成验证码的技术细节。 验证码的生成通常包括以下几个步骤: 1. **随机数生成**: 验证码的初始阶段是生成一组随机数字或字母。Android提供了`java.util.Random`类,可以生成随机整数...
在这个项目中,开发者可能探讨了如何在Android系统上生成和验证这种随机生成的图形验证码。 【描述】描述中提到的".zip"文件可能包含了整个项目的所有资源,包括源代码、图片资源、配置文件等。这通常是开发者为了...
- 错误处理:如果用户输入错误,可以显示错误提示,并重新生成验证码。 - 性能优化:考虑到用户体验,验证码的生成和验证应尽可能快,避免让用户等待过长时间。 5. 安全考虑: - 时效性:验证码应有一定的有效期...