ZXingLite для Android — это упрощенная и чрезвычайно быстрая версия ZXing.,на основеZXingКод сканирования оптимизации библиотекии Создать Функция QR-кода/штрих-кода,Интерфейс сканирования QR-кода полностью поддерживает настройку.,Вы также можете реализовать функцию сканирования кода по умолчанию с помощью одной строки кода. В любом случае, все, что вы хотите, здесь.
Это так просто, почему бы вам не попробовать? Давай~
Вы также можете скачать его напрямую Демо-приложение Эффект опыта
свойство | свойствотип | значение по умолчанию | свойствоиллюстрировать |
---|---|---|---|
maskColor | color | #60000000 | Цвет маски вне области сканирования |
frameColor | color | #7F1FB3E2 | Цвет границы области сканирования |
cornerColor | color | #FF1FB3E2 | Цвет углов области сканирования |
laserColor | color | #FF1FB3E2 | Цвет лазерной линии в зоне сканирования |
labelText | string | Сканирование текстовой информации подсказки | |
labelTextColor | color | #FFC0C0C0 | Подскажите цвет шрифта текста |
labelTextSize | dimension | 14sp | Подскажите размер шрифта текста |
labelTextPadding | dimension | 24dp | Расстояние между текстом подсказки и областью сканирования |
labelTextWidth | dimension | Ширина текста подсказки по умолчанию равна ширине представления. | |
labelTextLocation | enum | bottom | Позиция отображения текста подсказки |
frameWidth | dimension | Ширина поля скан-кода | |
frameHeight | dimension | Высота коробки сканирования | |
laserStyle | enum | line | Сканирование лазерного рисунка |
gridColumn | integer | 20 | Номер колонны лазерного сканирования сетки |
gridHeight | integer | 40dp | Высота лазерного сканирования сетки. Если значение равно 0dp, это означает динамическое покрытие. |
cornerRectWidth | dimension | 4dp | Ширина углов области сканирования |
cornerRectHeight | dimension | 16dp | Высота углов области сканирования |
scannerLineMoveDistance | dimension | 2dp | Расстояние перемещения линии сканирования каждый раз |
scannerLineHeight | dimension | 5dp | Высота строки сканирования |
frameLineWidth | dimension | 1dp | Ширина линии границы |
scannerAnimationDelay | integer | 20 | Интервал задержки анимации сканирования, единица измерения: миллисекунды |
frameRatio | float | 0.625f | Рамка сканирования и соотношение экрана к корпусу |
framePaddingLeft | dimension | 0 | Внутреннее пространство в левой части окна сканирования |
framePaddingTop | dimension | 0 | Внутреннее пространство над полем скан-кода |
framePaddingRight | dimension | 0 | Внутреннее пространство справа от поля скан-кода. |
framePaddingBottom | dimension | 0 | Внутреннее пространство под полем скан-кода |
frameGravity | enum | center | Выравнивание поля скан-кода |
pointColor | color | #FF1FB3E2 | Цвет итоговой точки |
pointStrokeColor | color | #FFFFFFFF | Цвет полученной обводки точки |
pointRadius | dimension | 15dp | радиус результирующей точки |
pointStrokeRatio | float | 1.2 | Отношение радиуса хода результирующей точки к радиусу результирующей точки. |
pointDrawable | reference | Пользовательское изображение итоговой точки | |
showPointAnim | boolean | true | Отображать ли анимацию точек результата |
laserDrawable | reference | Лазерное сканирование пользовательских изображений | |
viewfinderStyle | enum | classic | Поддержка стиля видоискателя: классический: классический стиль (с рамкой сканирования), популярный: популярный стиль (без рамки сканирования). |
allprojects {
repositories {
//...
mavenCentral()
}
}
// AndroidX Версия
implementation 'com.github.jenly1314:zxing-lite:2.3.1'
использовать v2.3.x При использовании вышеуказанной версии требуется compileSdkVersion >= 33
использовать v2.2.x При использовании вышеуказанной версии требуется compileSdkVersion >= 31
если compileSdkVersion < 31 пожалуйстаиспользовать v2.2.x предыдущая версия
v1.x старая версия v1.1.9
// AndroidX Версия
implementation 'com.king.zxing:zxing-lite:1.1.9-androidx'
// Android Support Версия
implementation 'com.king.zxing:zxing-lite:1.1.9'
для v1.x Версия,если JCenter закрыто, Можетиспользовать JitPack
1. Непосредственно обратитесь к CaptureActivity или CaptureFragment. (Реализация сканирования кода по умолчанию)
2. Используйте настраиваемый CaptureActivityили или CaptureFragment и настройте макет. (Применимо к большинству сценариев,Нет необходимости заботиться о логике, связанной со сканированием кода.,Настроитьмакет Нужно перезаписатьgetLayoutIdметод)Пример реализации:CustomCaptureActivity и QRCodeActivity
3. Просто создайте экземпляр CameraScan в действии или фрагменте вашего проекта. (Применимо для тех, кто хочет написать интерактивную логику в интерфейсе сканирования QR-кода.,И из-за структуры проекта и других причин,не может напрямуюиликосвенныйнаследоватьCaptureActivityилиCaptureFragmentчасиспользовать)Пример реализации:CustomFullScanActivity
4. Реализуйте один из вариантовCameraScan самостоятельно. Вы можете обратиться к классу реализации по умолчанию DefaultCameraScan. Остальные шаги аналогичны методу 3. (Расширенное расширенное использование, будьте осторожны)
CameraScan Поскольку это (основной) базовый класс сканирования камеры; все, что связано со сканированием камеры, прямо или косвенно контролируется на основе этого класса.
В основном конфигурации, связанные с камерой, такие как: передняя и задняя камеры, настройки предварительного просмотра камеры, конфигурации, связанные с анализом изображений и т. д.
Вы можете напрямую реализовать встроенную в библиотеку конфигурацию камеры: CameraConfig 、AspectRatioCameraConfig и ResolutionCameraConfig。
Вы также можете настроить или переопределить CameraConfig в options Метод, настройте конфигурацию по мере необходимости.
Здесь особенное Советы: Конфигурация по умолчанию При анализе размера изображения без настройки камеры приоритет будет отдан: Пейзаж использовать: 640 * 480 Вертикальный экран: 480 * 640;
В зависимости от качества изображения, вот плюсы и минусы конфигурации по умолчанию:
Когда использовать по умолчанию CameraConfig Если на некоторых моделях впечатления неудовлетворительны, вы можете попробовать использовать AspectRatioCameraConfig или ResolutionCameraConfig Будут неожиданные чудесные эффекты.
Analyzer Это определенный интерфейс анализатора, который в основном используется для анализа данных кадра предварительного просмотра камеры путем реализации; Analyzer Процесс анализа можно настроить.
CaptureActivity и CaptureFragment Будучи базовым классом интерфейса предварительного просмотра сканирования, его основная цель — облегчить быстрое сканирование и распознавание кода.
Интерфейс предварительного просмотра сканирования заблокирован CameraScan,и обработано CameraScan Инициализация (например, разрешения камеры, предварительный просмотр камеры, жизненный цикл и другие сведения)
CameraScan Он содержит некоторые методы, поддерживающие цепные вызовы, то есть вызов возвращает CameraScan Некоторые предложения конфигурации сами по себе называются startCamera() метод перед вызовом.
еслипереданонаследовать CaptureActivity или ВОЗ CaptureFragment или Сканирование камеры, реализованное его подклассами, можно найти в initCameraScan() Получить метод CameraScan , а затем при необходимости измените соответствующие конфигурации.
Пример 1:
// Загрузите CameraScan и отсканируйте соответствующие настройки конфигурации. CameraScanОн содержит некоторые методы, поддерживающие цепные вызовы, то есть вызов ВозвращаетCameraScan, перед запуском которого предлагается вызвать некоторую Конфигурацию.
getCameraScan().setPlayBeep(true)//Устанавливаем, воспроизводить ли звуковые эффекты, значение по умолчанию — false
.setVibrate(true)//Установить, следует ли вибрировать, значение по умолчанию — false
.setCameraConfig(new CameraConfig())//Установить информацию о конфигурации камеры. CameraConfig может переопределить метод параметров для настройки конфигурации.
.setNeedAutoZoom(false)//QR-код можно автоматически масштабировать, если он слишком мал, значение по умолчанию — false
.setNeedTouchZoom(true)//Поддерживает масштабирование с помощью касания несколькими пальцами, значение по умолчанию — true
.setDarkLightLux(45f)//Устанавливаем порог достаточно темного света (единица измерения: люкс), необходимо пройти {@link #bindFlashlightView(View)}Настройте фонарик, чтобы он работал эффективнее
.setBrightLightLux(100f)//Устанавливаем порог достаточно яркого света (единица измерения: люкс), необходимо пройти {@link #bindFlashlightView(View)}Настройте фонарик, чтобы он работал эффективнее
.bindFlashlightView(ivFlashlight)//Привязка фонарика. После привязки кнопка фонарика может динамически отображаться и скрываться в зависимости от датчика освещенности.
.setOnScanResultCallback(this)//Установите обратный вызов для результата сканирования. Если вам нужно обработать его самостоятельно, если вам нужно непрерывно сканировать, вы можете установить обратный вызов и самостоятельно обработать соответствующую логику.
.setAnalyzer(new MultiFormatAnalyzer(new DecodeConfig()))//Установите анализатор. DecodeConfig может предоставить некоторую информацию при декодировании. Если встроенный не соответствует вашим потребностям, вы также можете настроить реализацию.
.setAnalyzeImage(true);//Установите, следует ли анализировать изображения, значение по умолчанию — true. если установлено значение false, что эквивалентно отключению функции распознавания QR-кода.
// Запуск предварительного просмотра (если реализуется через наблюдениеCaptureActivityилиCaptureFragment, поэтому нет необходимости вызывать startCamera)
getCameraScan().startCamera();
// Установите, включен ли фонарик (фонарик) или нет. Для эффективности его необходимо вызывать после запуска камеры.
getCameraScan().enableTorch(torch);
Пример 2: (Пример конфигурации, в которой необходимо только распознать QR-код)
// Инициализация декодирования
DecodeConfig decodeConfig = new DecodeConfig();
decodeConfig.setHints(DecodeFormatManager.QR_CODE_HINTS) //если только необходимость распознавать QR-код, поэтому эффективность настройки будет выше. Если не установлено, по умолчанию используется DecodeFormatManager.DEFAULT_HINTS.
.setFullAreaScan(false)//Установить, распознавать ли всю область, значение по умолчанию — false
.setAreaRectRatio(0.8f)//Установите соотношение области распознавания, по умолчанию установлено значение 0,8. Установленное соотношение в конечном итоге обрежет прямоугольник на основе этого соотношения в области предварительного просмотра для сканирования и распознавания кода.
.setAreaRectVerticalOffset(0)//Устанавливает вертикальное смещение области распознавания, по умолчанию 0, 0 означает центрирование, это может быть отрицательное число
.setAreaRectHorizontalOffset(0);//Устанавливаем горизонтальное смещение области распознавания, по умолчанию 0, 0 означает центрирование, это может быть отрицательное число
// Перед запуском предварительного просмотра настройте анализатор на распознавание только QR-кодов.
getCameraScan()
.setCameraConfig(new AspectRatioCameraConfig(this))//设置камера Конфигурация,использовать AspectRatioCameraConfig
.setVibrate(true)//Установить, следует ли вибрировать, значение по умолчанию — false
.setAnalyzer(new MultiFormatAnalyzer(decodeConfig)); //Установим анализатор. Некоторые встроенные анализаторы не соответствуют вашим потребностям. Вы также можете настроить их.
PreviewView Для предварительного просмотра в макете должен быть хотя бы один PreviewView,еслиданаследовать CaptureActivity или CaptureFragment,контрольidМожетперезаписатьgetPreviewViewId
метод Настроить
ViewfinderView Он используется для визуализации просмотра скан-кода и предоставления пользователю визуального эффекта. Само распознавание скан-кода не имеет к этому никакого отношения. CaptureActivity или CaptureFragment,контрольIDМожет复写getViewfinderViewId
метод Настроить,По умолчанию previewView,Возврат 0 означает, что нет необходимости ViewfinderView
ivFlashlight это макет встроенного фонарика, если это необходимо CaptureActivity или CaptureFragment,контрольidМожет复写getFlashlightId
метод Настроить,По умолчанию ivFlashlight。Возврат 0 означает, что нет необходимости内置手电筒。您也Может以自己去定义
Может Настроитьмакет(перезаписать
getLayoutId
метод),В макете должен быть хотя бы один PreviewView。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.camera.view.PreviewView
android:id="@+id/previewView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.king.zxing.ViewfinderView
android:id="@+id/viewfinderView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/ivFlashlight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/zxl_flashlight_margin_top"
android:contentDescription="@null"
android:src="@drawable/zxl_flashlight_selector" />
</FrameLayout>
или Добавьте в свой макет
<include layout="@layout/zxl_capture"/>
Инструмент CodeUtils Пример использования (QR-код/штрих-код)
// Создать QR-код
CodeUtils.createQRCode(content,600,logo);
// Создать штрих-код
CodeUtils.createBarCode(content, BarcodeFormat.CODE_128,800,200);
// Разобрать штрих-код/QR-код
CodeUtils.parseCode(bitmap);
// Разобрать QR-код
CodeUtils.parseQRCode(bitmap);
Полный пример сканирования QR-кода путем наследования CaptureActivity
public class QRCodeActivity extends CaptureActivity {
@Override
public int getLayoutId() {
return R.layout.qr_code_activity;
}
@Override
public void initCameraScan() {
super.initCameraScan();
//Инициализация декодирования
DecodeConfig decodeConfig = new DecodeConfig();
decodeConfig.setHints(DecodeFormatManager.QR_CODE_HINTS) //если только необходимость распознавать QR-код, поэтому эффективность настройки будет выше. Если не установлено, по умолчанию используется DecodeFormatManager.DEFAULT_HINTS.
.setFullAreaScan(false)//Установить, распознавать ли всю область, значение по умолчанию — false
.setAreaRectRatio(0.8f)//Установите соотношение области распознавания, по умолчанию установлено значение 0,8. Установленное соотношение в конечном итоге обрежет прямоугольник на основе этого соотношения в области предварительного просмотра для сканирования и распознавания кода.
.setAreaRectVerticalOffset(0)//Устанавливает вертикальное смещение области распознавания, по умолчанию 0, 0 означает центрирование, это может быть отрицательное число
.setAreaRectHorizontalOffset(0);//Устанавливаем горизонтальное смещение области распознавания, по умолчанию 0, 0 означает центрирование, это может быть отрицательное число
//Перед запуском предварительного просмотра настройте анализатор на распознавание только QR-кодов.
getCameraScan()
.setVibrate(true)//Установить, следует ли вибрировать, значение по умолчанию — false
.setNeedAutoZoom(true)//QR-код можно автоматически масштабировать, если он слишком мал, значение по умолчанию — false
.setAnalyzer(new MultiFormatAnalyzer(decodeConfig)); //Установим анализатор. Некоторые встроенные анализаторы не соответствуют вашим потребностям. Вы также можете настроить их.
}
/**
* Обратный вызов результатов сканирования кода
* @param result
* @return Возврат false означает отсутствие перехвата, интерфейс сканирования QR-кода будет закрыт, а результат будет возвращен на вызывающий интерфейс;
* Возврат true означает перехват, и вам придется разобраться с логикой самостоятельно. Если isAnalyze имеет значение true, изображение будет продолжать анализироваться по умолчанию (то есть непрерывное сканирование).
* если只да想拦截Обратный вызов результатов сканирования кода,Я не хочу продолжать анализировать изображение (не хочу сканировать непрерывно),Пожалуйста, настройте логику сканирования кода перехвата, изменив
* Используйте {@ссылку CameraScan#setAnalyzeImage(boolean)},
* Потому что {@link Метод CameraScan#setAnalyzeImage(boolean)} может динамически контролировать, следует ли продолжать анализ изображения.
*
*/
@Override
public boolean onScanResultCallback(Result result) {
/*
* Потому что метод setAnalyzeImage может динамически контролировать, следует ли продолжать анализ изображения.
*
* 1. Поскольку по умолчанию для анализа изображений установлено значение true, если вы хотите поддерживать непрерывное сканирование, просто верните true.
* Если логика обработки непрерывного сканирования сложна, перед обработкой логики вызовите getCameraScan().setAnalyzeImage(false).
* чтобы прекратить анализ изображения, а затем вызвать getCameraScan().setAnalyzeImage(true), чтобы продолжить анализ изображения после обработки логики.
*
* 2. если只да想拦截Обратный вызов результатов сканирования кодаразберись с логикой сам,Но я не хочу продолжать анализировать изображение (то есть не хочу сканировать непрерывно),Может通过
* Вызовите getCameraScan().setAnalyzeImage(false), чтобы прекратить анализ изображения.
*/
return super.onScanResultCallback(result);
}
}
Подробнее об использовании,пожалуйста Проверятьappв Исходный код Пример использованияилипрямой ПроверятьСправочная документация по API
если вы напрямую используете значение по умолчанию CaptureActivity , вам необходимо зарегистрировать его в AndroidManifest вашего проекта. CaptureActivity,Конфигурацияследующее
<activity
android:name="com.king.zxing.CaptureActivity"
android:screenOrientation="portrait"
android:theme="@style/CaptureTheme"/>
Требуется компиляция JDK8+, добавьте Конфигурацию в android{} вашего проекта вbuild.gradle:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
когдаиспользоватьZXingLiteдля v2.3.x Вот и все Версиячас,(Прямо сейчас:Обновите zxing до версии 3.5.1 или более поздняя версия); если она должна быть совместима с Android. 7.0 (N) ниже Версия(Прямо сейчас:minSdk<24),API Java 8 и выше доступен через десахаризацию.
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2'
}
【v1.1.9】 еслитыиспользовать 1.x Пожалуйста, нажмите на ссылку ниже, чтобы просмотреть текущую версию филиала. 2.x версия основана на CameraX Требуется рефакторинг, API существенно изменилось, поэтому обновляйтесь с осторожностью.
Посмотреть версию AndroidX 1.x ветвь Пожалуйста, нажмите здесь
Посмотреть Android Поддержка версии 1.x ветвь Пожалуйста, нажмите здесь
Проверять 1.x Справочная документация по API