APP怎么做到二维码扫描
- 格式:docx
- 大小:28.28 KB
- 文档页数:1
如何用手机扫描自己手机上的二维码,一只手机也可以做到
平时我们经常遇到这种情况,别人发过来一个二维码让我们用手机扫一下,很多人会说,我就一只手机怎么扫啊。
这种情况我遇到过很多次,是有办法的,谁说一只手机就不能扫自己手机上的码。
首先我们需要把这个二维码图片保存在手机上。
然后打开一个手机浏览器,比如说打开UC浏览器,然后点击地址栏的扫一扫图标。
然后再点击相册的图标。
这样就可以选择自己手机相册中的图片进行扫描了。
其他手机浏览器的用法也都差不多,主要就是打开扫一扫,然后选择相册中的图片。
京东扫一扫操作方法
京东扫一扫是一种使用京东APP的功能,可以通过手机相机扫描商品条形码或二维码来获取商品信息、优惠信息和购买渠道等。
以下是京东扫一扫的操作方法:
1. 打开京东APP,确保已登录账号。
2. 在APP首页或底部导航栏找到“扫一扫”功能入口,一般是相机图标。
3. 点击“扫一扫”后,会打开相机界面。
4. 将商品的条形码或二维码置于相机框内,确保商品码清晰可见。
5. 按下相机拍照按钮,APP会自动识别码并显示相关商品信息。
6. 在商品信息页面,可以查看商品详情、价格、评价等,并可以选择购买或加入购物车。
7. 如果是二维码,可能会直接跳转到商家页面,如优惠活动页面、官方店铺等。
扫一扫功能还可以应用于其他场景,如扫描广告、名片等,进行二维码的识别与跳转。
需要注意的是,为了更好地使用京东扫一扫功能,建议保持网络畅通,确保APP 版本较新,同时尽量将扫描的码置于光线较好的环境中,以获得更准确的识别结果。
手机扫码支付的操作方法
手机扫码支付是一种通过手机相机扫描二维码完成支付的方式。
以下是操作方法的一般流程:
1. 下载并安装支持扫码支付的移动支付应用,例如微信支付、支付宝等。
2. 打开支付应用,在应用首页或底部菜单找到扫码支付功能入口。
3. 商家生成的二维码会显示在收银台或商品上,将手机相机对准二维码进行扫描。
4. 扫描成功后,支付应用会自动识别二维码并跳转到支付页面。
5. 在支付页面上输入支付密码或使用指纹、面容识别等付款方式,确认支付金额。
6. 确认支付完成后,支付应用会显示支付成功的提示,并通知商家收款。
注意事项:
- 确保手机相机对焦清晰,避免扫码失败。
- 确认二维码来源的可靠性,避免扫描支付到非法渠道。
- 确保支付应用已经完成账户绑定和支付密码设置。
⼿机百度浏览器怎么扫描⼆维码?百度浏览器扫描⼆维码
教程
⼤家平时都知道微信怎么扫描⼆维码,可能不知道百度⼿机浏览器也可以扫描⼆维码,下⾯⼩编就给⼤家分享下⼿机百度浏览器扫描⼆维码的⽅法,感兴趣的朋友们可以过来看看!
百度浏览器国际版 for android v3.1.3.3 安卓版
类型:⽹络通讯
⼤⼩:5.12MB
语⾔:简体中⽂
时间:2014-04-25
查看详情
步骤/⽅法
1、⾸先打开⼿机桌⾯上的“百度浏览器”
2、打开进⼊⾸页
3、点击⾸页右上⾓图标
4、出现扫描状态后,⼿机摄像头对准要扫描的⼆维码即可,要是扫描的⼆维码在⼿机图⽚⾥,选择下⽅的图⽚,选择即可
以上就是⼿机百度浏览器怎么扫描⼆维码的全部内容,希望对⼤家有所帮助!。
移动应用开发中如何进行扫码支付与条码支付随着移动互联网和智能手机的普及,移动应用开发已经成为了市场竞争中不可或缺的一环。
而其中最受欢迎和普及的功能之一就是扫码支付和条码支付。
本文将为大家介绍在移动应用中如何进行扫码支付与条码支付的开发与实现。
一、扫码支付的基本原理与实现1. 扫码支付的基本原理扫码支付是通过手机摄像头对扫描到的二维码进行解析,并将其包含的支付信息传输到支付系统进行支付。
二维码通常由商家提供,包含了订单号、支付金额等信息。
2. 扫码支付的开发实现在移动应用开发中,实现扫码支付的关键是使用合适的扫码库来进行二维码的扫描和解析。
目前市面上有不少开源的扫码库可供选择,比如Zxing、ZBar等。
通过调用这些扫码库的API,我们就可以在应用中实现扫码支付的功能。
二、条码支付的基本原理与实现1. 条码支付的基本原理条码支付与扫码支付原理类似,只是将实物商品的条形码作为支付信息,进行解析和支付。
条码支付需要将商品的条码信息与支付系统进行匹配,并将支付金额传输到支付系统进行支付。
2. 条码支付的开发实现条码支付的开发与实现相对简单,只需要使用合适的条码解析库来进行条码的解析即可。
市面上也有很多开源的条码解析库可供选择,比如Zbar等。
开发者只需将条码解析库集成到应用中,即可实现条码支付的功能。
三、扫码支付与条码支付的使用场景扫码支付与条码支付在实际使用中有着不同的应用场景。
1. 扫码支付的使用场景扫码支付适用于线下支付的场景,比如在实体店、超市等地点消费时可以使用扫码支付。
用户只需要打开应用,扫描店铺提供的二维码,即可完成支付。
扫码支付不仅方便快捷,还可以减少现金的使用,提高支付安全性。
2. 条码支付的使用场景条码支付适用于线上支付的场景,比如在电商平台上购物时可以使用条码支付。
用户只需在购物车页面选择使用条码支付,将商品的条码信息输入到应用中,即可完成支付。
条码支付方便用户购物,无需输入繁琐的支付信息,提高了用户的购物体验。
Android实现扫描⼆维码功能本⽂实例为⼤家分享了Android实现扫描⼆维码的具体代码,供⼤家参考,具体内容如下1.效果图:2.引⽤公共库:builder.radle,在app⽬录下implementation 'com.google.android.gms:play-services-maps:17.0.0'implementation 'com.google.android.gms:play-services-vision:19.0.0'implementation 'com.google.android.gms:auth-api-impl:11.6.0'3.清单⽂件,拍照权限申请<uses-permission android:name="android.permission.CAMERA" />4.主界⾯:package com.example.administrator.testz;import android.Manifest;import android.app.Activity;import android.content.ActivityNotFoundException;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.content.pm.PackageManager;import android.content.res.Resources;import .Uri;import android.os.Bundle;import android.os.PersistableBundle;import android.os.Vibrator;import android.util.Log;import android.util.SparseArray;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.widget.TextView;import com.google.android.gms.vision.CameraSource;import com.google.android.gms.vision.Detector;import com.google.android.gms.vision.barcode.Barcode;import com.google.android.gms.vision.barcode.BarcodeDetector;import java.io.IOException;import java.util.ArrayList;import androidx.annotation.Nullable;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.ActivityCompat;public class MainActivity extends AppCompatActivity {SurfaceView surfaceView;CameraSource cameraSource;TextView qrCodeText;BarcodeDetector barcodeDetector;public static ArrayList<String> scannList;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);surfaceView = (SurfaceView) findViewById(R.id.qrView);qrCodeText = (TextView) findViewById();scannList = new ArrayList<>();barcodeDetector = new BarcodeDetector.Builder(this).setBarcodeFormats(Barcode.QR_CODE).build();cameraSource = new CameraSource.Builder(this, barcodeDetector).setRequestedPreviewSize(640, 480).setAutoFocusEnabled(true).build();surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { return;}try {cameraSource.start(holder);} catch (IOException e) {e.printStackTrace();}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {cameraSource.stop();}});barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {@Overridepublic void release() {}@Overridepublic void receiveDetections(Detector.Detections<Barcode> detections) {final SparseArray<Barcode> qrCode = detections.getDetectedItems();if (qrCode.size() != 0) {qrCodeText.post(new Runnable() {@Overridepublic void run() {qrCodeText.setText(qrCode.valueAt(0).displayValue);addInList(qrCode.valueAt(0).displayValue);}});}}});}private void addInList(String scannResult) {if (scannList.isEmpty()) {scannList.add(scannResult);} else {String a = scannList.get(scannList.size() - 1);if (!a.equals(scannResult)) {scannList.add(scannResult);}}for (String s : scannList) {Log.e("s", "onCreate: " + s);}Log.e("size", "addInList: " + scannList.size());}@Overrideprotected void onDestroy() {super.onDestroy();}}5.布局页⾯:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.administrator.testz.MainActivity"><SurfaceViewandroid:id="@+id/qrView"android:layout_width="300dp"android:layout_height="300dp"android:layout_marginStart="32dp"android:layout_marginLeft="32dp"android:layout_marginEnd="32dp"android:layout_marginRight="32dp"android:orientation="vertical" /><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:text="TextView"android:textSize="30sp" /></RelativeLayout>以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
Androidstudio实现⼿机扫描⼆维码功能安卓⼿机版本在6.0以后需要动态获取相机权限1.获取相机权限<!-- 获取⼿机相机的权限 --><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.FLASHLIGHT" />2.添加依赖implementation 'cn.yipianfengye.android:zxing-library:2.2'3.activity_main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="wrap_content"android:layout_gravity="center"android:layout_height="wrap_content"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开启相机扫描"android:id="@+id/btn"/></LinearLayout>4.MainActivity.javapackage com.example.a86156.saomiao;import android.content.Intent;import android.content.pm.PackageManager;import android.os.Build;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.ActionBar;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;import com.uuzuche.lib_zxing.activity.CaptureActivity;import com.uuzuche.lib_zxing.activity.CodeUtils;import com.uuzuche.lib_zxing.activity.ZXingLibrary;public class MainActivity extends AppCompatActivity {Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);//隐藏系统默认的标题ActionBar actionBar = getSupportActionBar();if(actionBar!=null){actionBar.hide();}//初始化相机权限ZXingLibrary.initDisplayOpinion(this);btn = findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//先判断⼿机版本是否在6.0以上,如果在6.0以上则需要动态申请权限if (Build.VERSION.SDK_INT > 22) {if (ContextCompat.checkSelfPermission(MainActivity.this,android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {//先判断有没有权限,没有就在这⾥进⾏权限的申请ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.CAMERA}, 1);} else {//说明已经获取到摄像头权限了想⼲嘛⼲嘛Intent intent = new Intent(MainActivity.this, CaptureActivity.class);startActivityForResult(intent, 1);}} else {//这个说明系统版本在6.0之下,不需要动态获取权限。
手机A P P功能详细说明(总1页) -本页仅作为预览文档封面,使用时请删除本页-手机APP功能详析一登陆与安装功能:1.系统安装:可扫描二维码或下载.apk文件安装,安卓用户和iOS用户均可安装。
2.手动登陆:“应用”页面下,点击登陆按钮,跳转到登陆页面,输入账号和密码进行登陆。
3.自动登录:手动登陆时,选中自动登录,然后登录系统后,下次再开启程序时会自动登录保存的账号。
4.退出登录:“更多”页面下,点击退出登录,退出当前账户。
二会员信息:1.查看:“应用”页面下,点击会员名称上方的按钮,跳转到会员个人资料页面。
2.修改:个人资料页面点击修改按钮,可以对会员基本信息进行修改。
三首页:1.二维码扫描:点击右上角的二维码按钮,跳转到二维码扫描窗口,对准运单的二维码进行扫描。
注:此功能需要先登录,可扫描二维码或下载.apk文件安装,支持安卓用户和iOS用户。
2.广告或图片轮播:页面上信息可以左右滑动,点击图片跳转到相应的网页链接。
四消息:1.消息列表:显示接收到的到账信息以及系统消息2.查看消息:点击一条消息跳转到消息详情页面,或者长按某条消息在弹出的对话框中选择查看。
3.设为已读:长按某条消息,弹出的对话框点击已读。
4.删除:长按某条消息,弹出的对话框点击删除。
5.通知栏提醒:当有新消息时在手机通知栏会有提醒,点击提醒条目跳转到软件的消息功能页面。
五应用:1.动态解析配置信息并展示相应功能:(1)服务器设置哪些功能为手机端可以展示,登录以后通过与服务器交换,展示有权限的功能(2)常用的增删改查等功能通过读取配置信息操作不同的信息。
2.手机绑定:发送验证码到指定手机上,验证通过后绑定或者解绑手机。
注意:此功能需要登录。
3.手机扫描二维码支付代购费用:手机通过支付宝支付费用。
4.密码修改:注意:此功能需要登录。
六更多:1.客户反馈:用户可以输入反馈的内容,提交给服务器。
2.点击平台网址,打开工会系统官方网页。
如何进行移动应用的二维码扫描和生成移动应用的二维码扫描和生成已经成为我们日常生活中的常见事物。
不论是支付宝的二维码支付,还是扫描购物APP上的商品条形码,二维码已经成为了我们生活的一部分。
在这篇文章中,我们将探讨如何进行移动应用的二维码扫描和生成。
在移动应用中,二维码扫描通常是通过调用相机功能来实现的。
当我们打开一个支持二维码扫描的应用时,应用会要求我们授权使用相机功能。
一旦授权成功,应用就可以使用相机来扫描二维码了。
扫描二维码通常非常简单。
我们只需要将二维码对准手机摄像头,稍微等待一下,应用就能自动识别并解码二维码的内容了。
扫描二维码的时间可能因为设备性能和二维码复杂度而有所不同,但通常都非常迅速。
对于生成二维码来说,我们可以使用专门的移动应用来进行操作,也可以通过代码在应用中生成二维码。
无论是哪种方法,生成二维码都非常简单。
如果我们选择使用移动应用来生成二维码,我们可以在应用商店中搜索“二维码生成器”,下载一个适合我们的应用。
这些应用通常提供了一系列的选项,比如生成文本、链接、电话号码、电子邮件等类型的二维码。
我们只需要选择我们需要生成的类型,输入相关内容,应用就会生成对应的二维码了。
另一种生成二维码的方法是通过代码来实现。
许多编程语言都提供了生成二维码的库,我们只需要调用相应的函数或方法,传入需要生成的内容和二维码的相关参数,就可以得到一个二维码图片。
这种方法对于开发者来说非常方便,可以在自己的应用中动态地生成二维码。
除了生成基本的二维码,一些移动应用还提供了一些高级的功能。
比如,我们可以在生成的二维码中添加自定义的图标或背景,使得二维码更加个性化;我们也可以设置二维码的颜色、大小等参数,以满足不同的需求。
通过这些功能,我们可以制作出独特且具有品牌特色的二维码。
在实际使用中,我们可能会遇到一些二维码扫描问题。
比如,在显示屏幕上的二维码可能扫描不成功,这通常是由于屏幕亮度、分辨率或反光等问题造成的。
Android实现扫码功能本⽂实例为⼤家分享了Android实现扫码功能的具体代码,供⼤家参考,具体内容如下1、引⼊implementation 'com.journeyapps:zxing-android-embedded:3.5.0'2、使⽤:public void initScan() {IntentIntegrator integrator = new IntentIntegrator(this);// 设置要扫描的条码类型,ONE_D_CODE_TYPES:⼀维码,QR_CODE_TYPES-⼆维码integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);integrator.setCaptureActivity(ScanActivity.class); //设置打开摄像头的Activityintegrator.setPrompt(""); //底部的提⽰⽂字,设为""可以置空integrator.setCameraId(0); //前置或者后置摄像头integrator.setBeepEnabled(true); //扫描成功的「哔哔」声,默认开启integrator.setBarcodeImageEnabled(true);integrator.initiateScan();}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent intent) {super.onActivityResult(requestCode, resultCode, intent);if (requestCode == IntentIntegrator.REQUEST_CODE) {IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);if (scanResult != null && scanResult.getContents() != null) {String result = scanResult.getContents();LogUtil.d("扫码返回: " + result);try {JSONObject jsonObject = new JSONObject(result);if (jsonObject.has(ERPOLICEMENID)) {//TODO 逻辑} else {ToastUtil.showShortToast("未扫描到有效的信息");}} catch (Exception e) {ToastUtil.showShortToast("未扫描到有效的信息");e.printStackTrace();}} else {ToastUtil.showShortToast("未扫描到有效的信息");}}}3、ScanActivitypublic class ScanActivity extends BackActivity {@BindView(R.id.dbv)DecoratedBarcodeView mDbv;private CaptureManager captureManager;@Overrideprotected int getLayoutId() {getWindow().setFlags(youtParams.FLAG_FULLSCREEN, youtParams.FLAG_FULLSCREEN); return yout.activity_scan;}@Overrideprotected void init() {super.init();captureManager = new CaptureManager(this, mDbv);captureManager.initializeFromIntent(getIntent(), getSavedInstanceState());captureManager.decode();}@Overridepublic void onSaveInstanceState(@NotNull Bundle outState, @NotNull PersistableBundle outPersistentState) {super.onSaveInstanceState(outState, outPersistentState);captureManager.onSaveInstanceState(outState);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {return mDbv.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event);}@Overrideprotected void onPause() {super.onPause();captureManager.onPause();}@Overridepublic void onResume() {super.onResume();captureManager.onResume();}@Overrideprotected void onDestroy() {super.onDestroy();captureManager.onDestroy();}}4、布局⽂件activity_scan<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".ui.main.alarmassistant.ScanActivity"><com.journeyapps.barcodescanner.DecoratedBarcodeViewandroid:id="@+id/dbv"android:layout_width="match_parent"android:layout_height="match_parent"android:fitsSystemWindows="true"app:zxing_framing_rect_height="200dp"app:zxing_framing_rect_width="200dp"app:zxing_preview_scaling_strategy="fitXY"app:zxing_scanner_layout="@layout/view_qr"app:zxing_use_texture_view="true" /></LinearLayout>view_qr<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"><com.journeyapps.barcodescanner.BarcodeViewandroid:id="@+id/zxing_barcode_surface"android:layout_width="match_parent"android:layout_height="match_parent"app:zxing_framing_rect_height="50dp"app:zxing_framing_rect_width="250dp" /><com.x.x.widget.QrViewandroid:id="@+id/zxing_viewfinder_view"android:layout_width="match_parent"android:layout_height="match_parent"app:zxing_possible_result_points="@color/color_white"app:zxing_result_view="@color/zxing_custom_result_view"app:zxing_viewfinder_laser="@color/color_white"app:zxing_viewfinder_mask="@color/zxing_custom_viewfinder_mask" /><TextViewandroid:id="@+id/zxing_status_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom|center_horizontal"android:layout_marginBottom="30dp"android:background="@color/zxing_transparent"android:text="@string/zxing_msg_default_status"android:textColor="@color/zxing_status_text" /><mon.widget.MyActionBarandroid:id="@+id/action_bar"android:layout_width="match_parent"android:layout_height="wrap_content"app:dark_mode="true"app:title="扫⼀扫" /></merge>5、/*** ⾃定义扫描界⾯*/public class QrView extends ViewfinderView {public int laserLinePosition = 0;public float[] position = new float[]{0f, 0.5f, 1f};public int[] colors = new int[]{0x0027B14D, 0xff27B14D, 0x0027B14D};public LinearGradient linearGradient;private int ScreenRate;public QrView(Context context, AttributeSet attrs) {super(context, attrs);float density = context.getResources().getDisplayMetrics().density;ScreenRate = (int) (15 * density);}@Overridepublic void onDraw(Canvas canvas) {int CORNER_WIDTH = 15;refreshSizes();if (framingRect == null || previewFramingRect == null) {return;}Rect frame = framingRect;Rect previewFrame = previewFramingRect;int width = canvas.getWidth();int height = canvas.getHeight();//绘制4个⾓paint.setColor(getResources().getColor(R.color.color_white));//定义画笔的颜⾊canvas.drawRect(frame.left, frame.top, frame.left + ScreenRate, frame.top + CORNER_WIDTH, paint);canvas.drawRect(frame.left, frame.top, frame.left + CORNER_WIDTH, frame.top + ScreenRate, paint);canvas.drawRect(frame.right - ScreenRate, frame.top, frame.right, frame.top + CORNER_WIDTH, paint);canvas.drawRect(frame.right - CORNER_WIDTH, frame.top, frame.right, frame.top + ScreenRate, paint);canvas.drawRect(frame.left, frame.bottom - CORNER_WIDTH, frame.left + ScreenRate, frame.bottom, paint); canvas.drawRect(frame.left, frame.bottom - ScreenRate, frame.left + CORNER_WIDTH, frame.bottom, paint);canvas.drawRect(frame.right - ScreenRate, frame.bottom - CORNER_WIDTH, frame.right, frame.bottom, paint); canvas.drawRect(frame.right - CORNER_WIDTH, frame.bottom - ScreenRate, frame.right, frame.bottom, paint);// 画出外部(即构图矩形之外)变暗paint.setColor(resultBitmap != null ? resultColor : maskColor);canvas.drawRect(0, 0, width, frame.top, paint);canvas.drawRect(0, frame.top, frame.left, frame.bottom, paint);canvas.drawRect(frame.right, frame.top, width, frame.bottom, paint);canvas.drawRect(0, frame.bottom, width, height, paint);if (resultBitmap != null) {// Draw the opaque result bitmap over the scanning rectanglepaint.setAlpha(CURRENT_POINT_OPACITY);canvas.drawBitmap(resultBitmap, null, frame, paint);} else {laserLinePosition = laserLinePosition + 8;if (laserLinePosition >= frame.height()) {laserLinePosition = 0;}linearGradient = new LinearGradient(frame.left + 1, frame.top + laserLinePosition, frame.right - 1, frame.top + 10 + laserLinePosition, colors, position, Shader.TileMode.CLAMP); // Draw a red "laser scanner" line through the middle to show decoding is activepaint.setShader(linearGradient);//绘制扫描线canvas.drawRect(frame.left + 1, frame.top + laserLinePosition, frame.right - 1, frame.top + 10 + laserLinePosition, paint);paint.setShader(null);float scaleX = frame.width() / (float) previewFrame.width();float scaleY = frame.height() / (float) previewFrame.height();List<ResultPoint> currentPossible = possibleResultPoints;List<ResultPoint> currentLast = lastPossibleResultPoints;int frameLeft = frame.left;int frameTop = frame.top;if (currentPossible.isEmpty()) {lastPossibleResultPoints = null;} else {possibleResultPoints = new ArrayList<>(5);lastPossibleResultPoints = currentPossible;paint.setAlpha(CURRENT_POINT_OPACITY);paint.setColor(resultPointColor);for (ResultPoint point : currentPossible) {canvas.drawCircle(frameLeft + (int) (point.getX() * scaleX), frameTop + (int) (point.getY() * scaleY), POINT_SIZE, paint);}}if (currentLast != null) {paint.setAlpha(CURRENT_POINT_OPACITY / 2);paint.setColor(resultPointColor);float radius = POINT_SIZE / 2.0f;for (ResultPoint point : currentLast) {canvas.drawCircle(frameLeft + (int) (point.getX() * scaleX), frameTop + (int) (point.getY() * scaleY), radius, paint);}}postInvalidateDelayed(16, frame.left, frame.top, frame.right, frame.bottom);}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。