我的代码总结:链接: http://pan.baidu.com/s/1bpgI8Ar 密码: h3re;

谁会将粗糙的二维码,能够有效处理的;分享下给我;谢谢

还有谁会增加 二维码的解码库,也分享下给我,万分感谢;

下面是color.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<resources><color name="colorPrimary">#3F51B5</color><color name="colorPrimaryDark">#303F9F</color><color name="colorAccent">#FF4081</color><color name="bg_color">#EDEDED</color><color name="contents_text">#ff000000</color><color name="encode_view">#ffffffff</color><color name="help_button_view">#ffcccccc</color><color name="help_view">#ff404040</color><color name="possible_result_points">#c00000ff</color><!--  设置 闪点的 颜色 黄色#c0ffff00,先修改为蓝色 --><color name="result_image_border">#ffffffff</color><color name="result_minor_text">#ffc0c0c0</color><color name="result_points">#c000ff00</color><color name="result_text">#ffffffff</color><color name="result_view">#b0000000</color><color name="sbc_header_text">#ff808080</color><color name="sbc_header_view">#ffffffff</color><color name="sbc_list_item">#fffff0e0</color><color name="sbc_layout_view">#ffffffff</color><color name="sbc_page_number_text">#ff000000</color><color name="sbc_snippet_text">#ff4b4b4b</color><color name="share_text">#ff000000</color><color name="share_view">#ffffffff</color><color name="status_view">#50000000</color><color name="status_text">#ffffffff</color><color name="transparent">#00000000</color><color name="viewfinder_frame">#ff000000</color><color name="viewfinder_laser">#ff0000ff</color><!--  设置 扫描框 的 扫描线的颜色 红色,现在修改为 蓝色 --><color name="viewfinder_laser_left">#ff00ccff</color><!--    设置 扫描框 的 扫描线  左边的颜色 红色,现在修改为 淀亮色 --><color name="viewfinder_laser_center">#ff0000ff</color><!-- 设置 扫描框 的 扫描线  中间的颜色 红色,现在修改为 蓝色 --><color name="viewfinder_laser_right">#ff00ccff</color><!--  设置 扫描框 的 扫描线  右边的颜色 红色,现在修改为 淀亮色 --><color name="viewfinder_4_corner">#ff0000ff</color><!--  设置 扫描框 的 四个角  的颜色  现在改为 蓝色--><color name="viewfinder_text">#ffffffff</color><!--  设置 扫描框 的  下面字体颜色     改为白色 --><color name="viewfinder_mask">#60000000</color><color name="header">#58567D</color><color name="grgray">#686868</color>
</resources>

下面是 ViewfindView.java

/** 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.example.zxing_update.zxing.view;import java.util.Collection;
import java.util.HashSet;import android.R.integer;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.GradientDrawable;
import android.util.AttributeSet;
import android.view.View;import com.example.zxing_update.R;
import com.example.zxing_update.zxing.camera.CameraManager;
import com.google.zxing.ResultPoint;/*** This view is overlaid on top of the camera preview. It adds the viewfinder* rectangle and partial transparency outside it, as well as the laser scanner* animation and result points.*/
public final class ViewfinderView extends View {private static final int[] SCANNER_ALPHA = { 0, 64, 128, 192, 255, 192,128, 64 };private static final long ANIMATION_DELAY = 100L;private static final int OPAQUE = 0xFF;private final Paint paint;private Bitmap resultBitmap;private final int maskColor;private final int resultColor;private final int frameColor;private final int laserColor;private final int resultPointColor;private int scannerAlpha;private Collection<ResultPoint> possibleResultPoints;private Collection<ResultPoint> lastPossibleResultPoints;// 二维码 美化功能 添加处private boolean laserLinePortrait = true;Rect mRect;int i = 0;GradientDrawable mDrawable;Paint textPaint;private int textColor;private int rectCorner_color;private int laserColor_left; private int laserColor_center; private int laserColor_right; // This constructor is used when the class is built from an XML resource.public ViewfinderView(Context context, AttributeSet attrs) {super(context, attrs);// Initialize these once for performance rather than calling them every// time in onDraw().paint = new Paint();// 二维码 美化功能 添加处textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mRect = new Rect();
//      int laserColor_left = Color.parseColor("#CACACA");
//      int laserColor_center = Color.RED;
//      int laserColor_right = Color.parseColor("#CACACA");Resources resources = getResources();laserColor_left = resources.getColor(R.color.viewfinder_laser_left);// 设置 扫描线的 的颜色 laserColor_center = resources.getColor(R.color.viewfinder_laser_center);// 设置 扫描线的 的颜色 laserColor_right = resources.getColor(R.color.viewfinder_laser_right);// 设置 扫描线的 的颜色 mDrawable = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, new int[] { laserColor_left, laserColor_center, laserColor_right });maskColor = resources.getColor(R.color.viewfinder_mask);resultColor = resources.getColor(R.color.result_view);frameColor = resources.getColor(R.color.viewfinder_frame);laserColor = resources.getColor(R.color.viewfinder_laser);// 设置 扫描线的 的颜色 textColor = resources.getColor(R.color.viewfinder_text);// 设置 扫描 框下面的的 的颜色 resultPointColor = resources.getColor(R.color.possible_result_points);//  设置闪点的 颜色rectCorner_color= resources.getColor(R.color.viewfinder_4_corner);//设置 扫描框的 四个角的颜色scannerAlpha = 0;possibleResultPoints = new HashSet<ResultPoint>(5);}@Overridepublic void onDraw(Canvas canvas) {// 中间的扫描框,你要修改扫描框的大小,去CameraManager里面修改Rect frame = CameraManager.get().getFramingRect();if (frame == null) {return;}// 获取屏幕的宽和高int width = canvas.getWidth();int height = canvas.getHeight();// Draw the exterior (i.e. outside the framing rect) darkened//画出扫描框外面的阴影部分,共四个部分,扫描框的上面到屏幕上面,扫描框的下面到屏幕下面  //                                       扫描框的左边面到屏幕左边,扫描框的右边到屏幕右边paint.setColor(resultBitmap != null ? resultColor : maskColor);canvas.drawRect(0, 0, width, frame.top, paint);canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1,paint);canvas.drawRect(0, frame.bottom + 1, width, height, paint);if (resultBitmap != null) {// Draw the opaque result bitmap over the scanning rectanglepaint.setAlpha(OPAQUE);canvas.drawBitmap(resultBitmap, frame.left, frame.top, paint);} else {
// 二维码 美化功能  替换处
//          //画扫描框边上的角,总共8个部分
//          // Draw a two pixel solid black border inside the framing rect
//          paint.setColor(frameColor);
//          canvas.drawRect(frame.left, frame.top, frame.right + 1,frame.top + 2, paint);
//
//          canvas.drawRect(frame.left, frame.top + 2, frame.left + 2,frame.bottom - 1, paint);
//
//          canvas.drawRect(frame.right - 1, frame.top, frame.right + 1,frame.bottom - 1, paint);
//
//          canvas.drawRect(frame.left, frame.bottom - 1, frame.right + 1,frame.bottom + 1, paint);
//
//
//          // Draw a red "laser scanner" line through the middle to show
//          // decoding is active
//           //画扫描框下面的字
//          paint.setColor(laserColor);
//          paint.setAlpha(SCANNER_ALPHA[scannerAlpha]);
//          scannerAlpha = (scannerAlpha + 1) % SCANNER_ALPHA.length;
//          int middle = frame.height() / 2 + frame.top;
//          canvas.drawRect(frame.left + 2, middle - 1, frame.right - 1,
//                  middle + 2, paint);//  二维码 美化功能 替换处paint.setColor(rectCorner_color);//画出四个角:以屏幕左上角 为原点进行画边-画矩形:遵守  左-上-右-下原则canvas.drawRect(frame.left - 10, frame.top - 10, frame.left + 20, frame.top, paint);canvas.drawRect(frame.left - 10, frame.top - 10, frame.left, frame.top + 20, paint);canvas.drawRect(frame.right - 20, frame.top - 10, frame.right + 10, frame.top, paint);canvas.drawRect(frame.right, frame.top - 10, frame.right + 10, frame.top + 20, paint);//          这个 美化下面四个角有错:下边  不能再上边的 上边 ,画不出来;  一定要遵循上面的原则
//          canvas.drawRect(frame.left - 10, frame.bottom + 10, frame.left + 20, frame.bottom, paint);
//          canvas.drawRect(frame.left - 10, frame.bottom + 10, frame.left, frame.bottom - 20, paint);
//          canvas.drawRect(frame.right - 20, frame.bottom + 10, frame.right + 10, frame.bottom, paint);
//          canvas.drawRect(frame.right, frame.bottom + 10, frame.right + 10, frame.bottom - 20, paint);
//          这个 美化下面四个角 更正canvas.drawRect(frame.left - 10,frame.bottom, frame.left + 20,frame.bottom + 10, paint);canvas.drawRect(frame.left - 10, frame.bottom - 20, frame.left,frame.bottom + 10 , paint);canvas.drawRect(frame.right - 20,  frame.bottom, frame.right + 10, frame.bottom + 10, paint);canvas.drawRect(frame.right,  frame.bottom - 20, frame.right + 10,frame.bottom + 10, paint);int middle = frame.width() / 2;textPaint.setTextSize(25);//字体的大小textPaint.setColor(textColor);//字体颜色String text = getResources().getString(R.string.dimension_content);int textLen=(int) textPaint.measureText(text);//获得文本的长度canvas.drawText(text, frame.width() / 2 + frame.left-textLen/2, frame.bottom + 60, textPaint);//          画一个红色的线// Draw a red "laser scanner" line through the middle to show// decoding is activepaint.setColor(laserColor);// 这句话 似乎没有用paint.setStrokeWidth(2);//paint.setAlpha(SCANNER_ALPHA[scannerAlpha]);scannerAlpha = (scannerAlpha + 1) % SCANNER_ALPHA.length;//上下走的线   :实现线 上下走if (laserLinePortrait) {if ((i += 5) < frame.bottom - frame.top) {/** canvas.drawRect(frame.left + 2, frame.top - 2 + i, frame.right - 1, frame.top + 2 + i,* paint);*/int r = 8;
//            shap 样式可以自己自定义 ,使用getResources().getDrawable(id)  进行调用mDrawable.setShape(GradientDrawable.RECTANGLE);//设置 矩形线mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);//LINEAR_GRADIENT  设置线的颜色渐变setCornerRadii(mDrawable, r, r, r, r);mRect.set(frame.left + 2, frame.top - 3 + i, frame.right - 1, frame.top + 3 + i);mDrawable.setBounds(mRect);mDrawable.draw(canvas);invalidate();} else {i = 0;}} else {float left = frame.left + (frame.right - frame.left) / 2 - 2;canvas.drawRect(left, frame.top, left + 2, frame.bottom - 2, paint);}Collection<ResultPoint> currentPossible = possibleResultPoints;Collection<ResultPoint> currentLast = lastPossibleResultPoints;if (currentPossible.isEmpty()) {lastPossibleResultPoints = null;} else {possibleResultPoints = new HashSet<ResultPoint>(5);lastPossibleResultPoints = currentPossible;paint.setAlpha(OPAQUE);paint.setColor(resultPointColor);//  设置扫描  亮点的颜色for (ResultPoint point : currentPossible) {canvas.drawCircle(frame.left + point.getX(), frame.top+ point.getY(), 6.0f, paint);}}if (currentLast != null) {paint.setAlpha(OPAQUE / 2);paint.setColor(resultPointColor);for (ResultPoint point : currentLast) {canvas.drawCircle(frame.left + point.getX(), frame.top+ point.getY(), 3.0f, paint);}}// Request another update at the animation interval, but only// repaint the laser line,// not the entire viewfinder mask.//只刷新扫描框的内容,其他地方不刷新postInvalidateDelayed(ANIMATION_DELAY, frame.left, frame.top,frame.right, frame.bottom);}}public void setCornerRadii(GradientDrawable drawable, float r0, float r1, float r2, float r3) {drawable.setCornerRadii(new float[] { r0, r0, r1, r1, r2, r2, r3, r3 });}public void drawViewfinder() {resultBitmap = null;invalidate();}/*** Draw a bitmap with the result points highlighted instead of the live* scanning display.* * @param barcode*            An image of the decoded barcode.*/public void drawResultBitmap(Bitmap barcode) {resultBitmap = barcode;invalidate();}public void addPossibleResultPoint(ResultPoint point) {possibleResultPoints.add(point);}}

二维码 扫描框的 处理 美化功能 喜欢的 自己直接替换和修改相关推荐

  1. Flutter 画笔绘制二维码扫描框

    文章目录 一.CustomPaint介绍 1. CustomPaint 2. CustomPainter 3. Paint & Canvas 4. 示例(绘制文本背景) 二.计算扫描框四个点坐 ...

  2. 二维码扫描优化及爱奇艺App的实践

    写在前面 二维码是一个近几年来移动设备上超流行的一种编码方式(又称二维条码,QR Code,QR全称QuickResponse),它比传统的条形码(Bar Code)能存更多的信息,也能表示更多的数据 ...

  3. Android 9 实现二维码扫描处理(BGAQRCode-Android) 笔记

    首先声明,本笔记是在下面这位大佬的代码基础上改的,本人会将实现过程中出现的问题和经验写在下面,本笔记可以结合github上作者的readme一起看: https://github.com/bingoo ...

  4. 完整的二维码扫描解决方案

    现在的应用都有自己的二维码扫描工具,最近接手的项目也不例外,集成了ZXing二维码扫描,但是用起来却实在差强人意,后来看到QrCodeReaderView效果不错,识别速度上有明显提高,而且使用也非常 ...

  5. 如何用MediaCapture解决二维码扫描问题

    二维码扫描的实现,简单的来说可以分三步走:"成像"."截图"与"识别". UWP开发中,最常用的媒体工具非MediaCapture莫属了,下 ...

  6. QML for Android 实现二维码扫描(QZXing)

    前言 由于项目要求,需要用 Qt 做一个Android 程序用于扫描二维码并获取扫码内容,之前参考了很多资料,很多都是基于桌面端的二维码识别,如一去丶二三里大神的Qt之二维码扫描,原理是直接导入一张二 ...

  7. ios7 苹果原生二维码扫描(和微信类似)

    在ios7苹果推出了二维码扫描,以前想要做二维码扫描,只能通过第三方ZBar与ZXing. ZBar在扫描的灵敏度上,和内存的使用上相对于ZXing上都是较优的,但是对于 "圆角二维码&qu ...

  8. 【IOS】集成zxing(二维码扫描)

    现在zxing已经到了2.2版本,以前的集成方式出了点问题.下面我做出一点修正. 以前的版本的集成方法,参考:http://blog.devtang.com/blog/2012/12/23/use-z ...

  9. 二维码扫描和应用跳转

    转载自: http://sindrilin.com/ios-dev/2015/11/01/二维码扫描和应用跳转.html 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫 ...

最新文章

  1. idea中实体类右击没有ptg_几个牛逼的IDEA插件,Java开发者撸码神器,还带动图的!...
  2. delete 和 delete [] 的真正区别
  3. SRX alarm: Autorecovery information needs to be saved
  4. JS 创建对象的七种方式
  5. Samba服务器简介及自动挂载配置案例
  6. 百度网页移动端html,百度移动端开始用网站品牌名代替网址显示
  7. 详解Objective-C消息传递机制
  8. 如何看待蒂姆·库克在苹果的地位
  9. python开发效率高吗_从运行效率与开发效率比较Python和C++
  10. python post提交给php,从Python发送HTTP POST请求(尝试从PHP转换)
  11. Print2flash在.NET(C#)64位中的使用,即文档在线预览(转载)
  12. LOJ2874 JOISC2014 历史研究 分块、莫队
  13. mysql从备份,mysql 主从同步范例-从同步备份步骤
  14. @Scope注解的proxyMode的作用以及如何影响IoC容器的依赖查找
  15. PreparedStatement 简介
  16. 程序员数学(23)–图形的旋转与中心对称
  17. 与微软中国梁念坚先生商榷
  18. C++ 打开文件夹对话框-OPENFILENAME
  19. 常见计算机系统哪些为GUI,GUI 是什么
  20. 关于理性形象的塑造——歇洛克·福尔摩斯眼中的世界

热门文章

  1. 用深度学习做命名实体识别(四)——模型训练
  2. 一加 Ace2是直屏还是曲面屏 一加 Ace2有IP68级防水吗
  3. EasyUI的datagrid删除后一页所有数据不自动显示前页数据
  4. WINDOWS下输入法中英文切换
  5. 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第4章 分治策略
  6. 基于STM32单片机采集数据数据上云
  7. 野外监测数据采集项目
  8. JAVA基础语法(1)
  9. 密码的自动生成器:密码由大写字母/小写字母/数字组成,生成12位随机密码
  10. 懂车帝上配置高的国产车为什么那么便宜?