Android studio生成二維碼

1.遇到的問題

需要生成一個二維碼,可以使用zxing第三方組件,增加依賴。

//生成二維碼
implementation 'com.google.zxing:core:3.4.1'

2.代碼?

  • 展示頁面
<ImageViewandroid:id="@+id/qrCodeImageView"android:layout_width="150dp"android:layout_height="150dp"android:drawablePadding="16dp"android:background="@drawable/button_round_4"tools:layout_editor_absoluteX="176dp"tools:layout_editor_absoluteY="523dp" />

  • 引用ImageView
ImageView qrCodeImageView;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().getAttributes().systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE;setContentView(R.layout.activity_config);qrCodeImageView = findViewById(R.id.qrCodeImageView);
}
  • 創建二維碼方法?

使用了幾個方法,會出現亂碼,通過最后這這種方式解決?

private void create_QR_code() throws WriterException {QRCodeWriter qrCodeWriter = new QRCodeWriter();String text= "成績:1000 \n姓名:張三 \n姓名:張三 \n姓名:張三 \n姓名:張三 \n姓名:張三 \n姓名:張三 \n姓名:張三 \n姓名:張三 \n姓名:張三 \n姓名:張三";// 生成二維矩陣,編碼時指定大小,不要生成了圖片以后再進行縮放,這樣會模糊導致識別失敗Hashtable<EncodeHintType, String> hints = new Hashtable<>();hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");BitMatrix matrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, 150, 150, hints);int width = matrix.getWidth();int height = matrix.getHeight();// 二維矩陣轉為一維像素數組,也就是一直橫著排了int[] pixels = new int[width * height];for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {if (matrix.get(x, y)) {pixels[y * width + x] = 0xff000000;}}}Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);// 通過像素數組生成bitmap,具體參考apibitmap.setPixels(pixels, 0, width, 0, 0, width, height);/*byte[] utf8Bytes = text.getBytes(StandardCharsets.UTF_8);String utf8BytesString = new String(utf8Bytes, StandardCharsets.UTF_8);// 生成二維矩陣,編碼時指定大小,不要生成了圖片以后再進行縮放,這樣會模糊導致識別失敗Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");BitMatrix bitMatrix = qrCodeWriter.encode(utf8BytesString, BarcodeFormat.QR_CODE, 150, 150);Bitmap bitmap = Bitmap.createBitmap(150, 150, Bitmap.Config.RGB_565);for (int x = 0; x < 150; x++) {for (int y = 0; y < 150; y++) {bitmap.setPixel(x, y, bitMatrix.get(x, y) ? getResources().getColor(R.color.black) : getResources().getColor(R.color.colorAccent));}}*/
/*        hashMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);//定義二維碼的糾錯級別,為LhashMap.put(EncodeHintType.CHARACTER_SET, "utf-8");//設置字符編碼為utf-8hashMap.put(EncodeHintType.MARGIN, 2);//設置margin屬性為2,也可以不設置String contents = "最簡單的Demo"; //定義二維碼的內容BitMatrix bitMatrix = null;   //這個類是用來描述二維碼的,可以看做是個布爾類型的數組try {bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, 150, 150, hashMap);//調用encode()方法,第一次參數是二維碼的內容,第二個參數是生二維碼的類型,第三個參數是width,第四個參數是height,最后一個參數是hints屬性} catch (WriterException e) {e.printStackTrace();}int width = bitMatrix.getWidth();//獲取widthint height = bitMatrix.getHeight();//獲取heightint[] pixels = new int[width * height]; //創建一個新的數組,大小是width*heightfor (int i = 0; i < width; i++) {for (int j = 0; j < height; j++) {//通過兩層循環,為二維碼設置顏色if (bitMatrix.get(i, j)) {pixels[i * width + j] = Color.BLACK;  //設置為黑色} else {pixels[i * width + j] = Color.WHITE; //設置為白色}}}//調用Bitmap的createBitmap(),第一個參數是width,第二個參數是height,最后一個是config配置,可以設置成RGB_565bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);//調用setPixels(),第一個參數就是上面的那個數組,偏移為0,x,y也都可為0,根據實際需求來,最后是width ,和heightbitmap.setPixels(pixels, 0, width, 0, 0, width, height);*///調用setImageBitmap()方法,將二維碼設置到imageview控件里qrCodeImageView.setImageBitmap(bitmap);}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209806.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu 如何修改主機名稱

UBUNTU 2018.04 LTS 64位 修改當前電腦的主機名稱。 操作步驟如下&#xff1a; 假設你的主機名為AAAAA &#xff0c; 打算修改為BBBBB。開機進入桌面。 打開一個終端。命令行下&#xff0c;使用vi /etc/hostname指令&#xff0c;編輯主機名稱。將hostname文件里的AAAAA改為BB…

【Linux】echo命令使用

?echo命令 功能是在顯示器上顯示一段文字&#xff0c;一般起到一個提示的作用。此外&#xff0c;也可以直接在文件中寫入要寫的內容。也可以用于腳本編程時顯示某一個變量的值&#xff0c;或者直接輸出指定的字符串。 ? 著者 由布萊恩福克斯和切特拉米撰寫。 語法 echo […

Flum--環境搭建實驗

1.解壓flum安裝包 解壓到/opt/module下&#xff1a; tar -zxvf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/ 2.修改flum名字&#xff1a; mv /opt/module/apache-flume-1.9.0-bin /opt/module/flume 3.將lib文件夾下的guava-11.0.2.jar刪除以兼容Hadoop…

圖像萬物分割——Segment Anything算法解析與模型推理

一、概述 在視覺任務中&#xff0c;圖像分割任務是一個很廣泛的領域&#xff0c;應用于交互式分割&#xff0c;邊緣檢測&#xff0c;超像素化&#xff0c;感興趣目標生成&#xff0c;前景分割&#xff0c;語義分割&#xff0c;實例分割&#xff0c;泛視分割等。 交互式分割&am…

設計模式之結構型模式(適配器、橋接、組合、享元、裝飾者、外觀、代理)

文章目錄 一、結構型設計模式二、適配器模式三、橋接模式四、組合模式五、享元模式六、裝飾者模式七、外觀模式八、代理設計模式 一、結構型設計模式 這篇文章我們來講解下結構型設計模式&#xff0c;結構型設計模式&#xff0c;主要處理類或對象的組合關系&#xff0c;為如何…

【已解決】ModuleNotFoundError: No module named ‘IPython‘

問題描述 Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named IPython 解決方法 pip install ipython 完結撒花 我并不想穿過荊棘去到黎明&#xff0c;我猜也沒有人會想

proftpd安全加固:禁用匿名登錄

其實&#xff0c;proftpd默認是禁止匿名登錄的。今天我們反其道&#xff0c;研究一下如何開啟匿名登錄。清楚了怎么破防&#xff0c;才能更好得防。 查看/etc/proftpd.conf 配置文件&#xff1a; # A basic anonymous configuration, with an upload directory # Enable this…

計算機設備管理器如何看內存,怎么查看電腦配置信息?3種方法,讓你掌握電腦全部信息!...

轉載&#xff1a;https://blog.csdn.net/weixin_35849957/article/details/118512756?spm1001.2014.3001.5502 原標題&#xff1a;怎么查看電腦配置信息&#xff1f;3種方法&#xff0c;讓你掌握電腦全部信息&#xff01; 電腦的配置決定了電腦性能高低以及運行速度。而電腦…

Emacs之Plantuml用于復雜UML類圖(Markdown用于簡單類圖)(一百三十二)

簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 優質專欄&#xff1a;多媒…

python主流開發工具排名,python開發工具有哪些

本篇文章給大家談談python的開發工具軟件有哪些&#xff0c;以及python主流開發工具排名&#xff0c;希望對各位有所幫助&#xff0c;不要忘了收藏本站喔。 python中用到哪些軟件 一、Python代碼編輯器1、sublime Textsublime Text是一款非常流行的代碼編輯器&#xff0c;支持P…

STM32L051使用HAL庫操作實例(13)- 讀取IAQ-CORE-C傳感器實例

目錄 一、前言 二、傳感器參數 三、STM32CubeMX配置&#xff08;本文使用的STM32CubeMX版本為6.1.2&#xff09;例程使用模擬I2C進行數據讀取 1.MCU選型 2.使能時鐘 3.時鐘配置 4.GPIO口配置 四、配置STM32CubeMX生成工程文件 五、點擊GENERATE CODE生成工程文件 六、…

Kubersphere應用【二】Docker安裝

一、Docker安裝 1.下載Docker安裝包 【地址】Index of linux/static/stable/x86_64/ 2.上傳至服務器 # 解壓文件 tar -xvf docker-20.10.10.tgz# 將docker 目錄中的所有文件復制至/usr/bin/目錄下 cp docker/* /usr/bin 3.配置docker.service文件 vim /usr/lib/systemd/sy…

arm平臺編譯so文件回顧

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、幾個點二、回顧過程 1.上來就執行Makefile2.編譯第三方開源庫.a文件 2.1 build.sh腳本2.2 Makefile3.最終編譯三、其它知識點總結 前言 提示&#xff1a;這…

MSSQL存儲過程的功能和用法(簡明扼要)

官方文檔 存儲過程&#xff08;數據庫引擎&#xff09; - SQL Server | Microsoft Learn Transact-SQL 參考&#xff08;數據庫引擎&#xff09; - SQL Server | Microsoft Learn 定義 存儲過程可以用編程語言的方法來類比&#xff0c;有輸入輸出。區別是其使用SQL表達業務…

spring 單元測試 Junit

我是南城余&#xff01;阿里云開發者平臺專家博士證書獲得者&#xff01; 歡迎關注我的博客&#xff01;一同成長&#xff01; 一名從事運維開發的worker&#xff0c;記錄分享學習。 專注于AI&#xff0c;運維開發&#xff0c;windows Linux 系統領域的分享&#xff01; 本…

解決打印機超出字節之使用PHP拆分字符串并保留分隔符

在開發過程中&#xff0c;我們經常需要將一個長字符串拆分成多個片段&#xff0c;并且保留原始字符串中的分隔符。在本篇教程中&#xff0c;我們將使用PHP編寫一個函數來實現這個功能。 首先&#xff0c;讓我們來看一下我們要解決的問題。假設我們有一個長字符串&#xff0c;我…

pywinrm 解析輸出為 dict 格式 字典格式

s winrm.Session(host, auth(username, password))task_folder \RPA\\ # 運行 schtasks 命令來列出任務計劃程序 command schtasks /query /fo csv # command fschtasks /query /fo csv /tn {task_folder} # command fschtasks /query /fo csv /tn "{task_folder}\\…

mapbox使用v3版本,v2的樣式切換不同時間段

創建DayAndNight.js /*** 使用方式* const dayNight new DayAndNight({ map: map // map 地圖對象}) * 修改類型* dayNight.setConfigProperty(value)*/ class DayAndNight {constructor (sdMap) {this.map sdMap.mapthis.initStyle()}// 初始化時添加必要樣式initStyle () {…

刪除計算機用戶時拒絕訪問權限,c盤為什么拒絕訪問 刪除c盤文件需要管理員權限怎么辦...

轉載&#xff1a;??????刪除計算機用戶時拒絕訪問權限,c盤為什么拒絕訪問 刪除c盤文件需要管理員權限怎么辦...-CSDN博客 c盤是電腦中的關鍵位置&#xff0c;存儲著很多系統重要文件&#xff0c;如果電腦出問題一般就是c盤中的文件異常&#xff0c;近日有小伙伴出現這樣…

前端知識筆記(四十一)———nodejs發起http或https請求

http請求 const express require(express) const http require(http)const app express()const loginConfig (token) > {return {hostname: api.test.com,port: 80,path: /test?access_token${token},method: GET} }app.get(/login, (req, res) > {const options …