Android 인증 코드 의 인 스 턴 스 코드 그리 기
효과 도
2.지식 점 과 사고 분석
위의 효과 도 를 통 해 관찰 하면 우 리 는 안에 그 려 진 랜 덤 라인 이 있 고 랜 덤 으로 그 려 진 인증 코드 를 볼 수 있다.
선,직선 또는 곡선 그리 기
텍스트 그리 기,생 성 된 인증 코드 텍스트 그리 기
원점 을 그립 니 다.
코드 작성
/**
* Created by Iflytek_dsw on 2017/7/3.
*/
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;
}
/**
*
* @return
*/
public String getIdentifyCode(){
if(stringBuffer == null){
return "";
}
return stringBuffer.toString();
}
/**
*
* @return
*/
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();
}
/**
*
* @param canvas
* @param width
* @param height
*/
private void drawCodeText(Canvas canvas,int width, int height){
Paint paint = new Paint();
paint.setTextSize(50);
/** code*/
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);
/** 0 1, 1 , */
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();
}
}
/**
*
* @param canvas
* @param width
* @param height
*/
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);
}
}
}
위 에서 말 한 것 은 소 편 이 소개 한 안 드 로 이 드 인증 코드 를 그 리 는 인 스 턴 스 코드 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.