现在的应用都有自己的二维码扫描工具,最近接手的项目也不例外,集成了ZXing二维码扫描,但是用起来却实在差强人意,后来看到QrCodeReaderView效果不错,识别速度上有明显提高,而且使用也非常简单,于是便迅速集成,唯独对扫码界面定制不够,于是再对ZXing中的自定义View修改,便得到较为完整的二维码扫描解决方案:
- 二维码扫描框
- 自定义属性
- 颜色资源
- 图片资源
- 生成二维码
- 二维码生成工具类
二维码扫描框
/*
* Copyright (C) 2008 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.apple.widget;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import com.apple.lottle.R;
import java.util.Collection;
import java.util.HashSet;
/**
* 自定义组件实现,扫描功能
*/
public final class ViewfinderView extends View {
private static final long ANIMATION_DELAY = 100L;
private static final int OPAQUE = 0xFF;
public static int FRAME_WIDTH = -1;
public static int FRAME_HEIGHT = -1;
public static int FRAME_MARGINTOP = -1;
private final Paint paint;
private final int maskColor;
private final int resultColor;
private final int resultPointColor;
private int screenWidthPx;
private int screenHeightPx;
private Bitmap resultBitmap;
private Collection<ResultPoint> possibleResultPoints;
private Collection<ResultPoint> lastPossibleResultPoints;
private Rect framingRect;
//扫描区域提示文本
private String labelText;
//扫描区域提示文本颜色
private int labelTextColor;
private float labelTextSize;
// 扫描线移动的y
private int scanLineTop;
// 扫描线移动速度
private int SCAN_VELOCITY;
// 扫描线
private Bitmap scanLight;
// 是否展示小圆点
private boolean isCircle;
// 扫描框边角颜色
private int innercornercolor;
// 扫描框边角长度
private int innercornerlength;
// 扫描框边角宽度
private int innercornerwidth;
public ViewfinderView(Context context) {
this(context, null);
}
public ViewfinderView(Context context, AttributeSet attrs) {
this(context, attrs, -1);
}
public ViewfinderView(Context context, AttributeSet at