条码扫描器是非常棒的一个条码扫描工具,开源的,我查查、快拍二维码都是基于ZXing项目开发的,但是扫描时为横屏,而其他的应用大部分都是竖屏的,屏幕横竖对于用户体验比较不方便,如何让ZXing条码扫描竖屏工作呢?下面将我的方法交给大家:
-
修改AndroidManifest.xml:
android:screenOrientation=”portrait”
-
修改CameraManager.java的getFramingRectInPreview():
-
rect
.
left
=
rect
.
left
*
cameraResolution
.
y
/
screenResolution
.
x
;
-
rect
.
right
=
rect
.
right
*
cameraResolution
.
y
/
screenResolution
.
x
;
-
rect
.
top
=
rect
.
top
*
cameraResolution
.
x
/
screenResolution
.
y
;
-
rect
.
bottom
=
rect
.
bottom
*
cameraResolution
.
x
/
screenResolution
.
y
;
-
修改CameraConfigurationManager.java中的setDesiredCameraParameters函数,在setZoom(parameters);后增加setDisplayOrientation(camera,
180); 在setDesiredCameraParameters函数外增加
-
private
void
setDisplayOrientation
(
Camera
camera
,
int
angle
)
{
-
Method
downPolymorphic
;
-
try
{
-
downPolymorphic
=
camera
.
getClass
().
getMethod
(
-
“setDisplayOrientation”
,
new
Class
[]
{
int
.
class
});
-
if
(
downPolymorphic
!=
null
)
-
downPolymorphic
.
invoke
(
camera
,
new
Object
[]
{
angle
});
-
}
catch
(
Exception
e1
)
{
-
}
-
}
-
修改DecodeHandler.java中的decode函数,将PlanarYUVLuminanceSource source =
CameraManager.get().buildLuminanceSource(data, width,
height);修改为
-
-
byte
[]
rotatedData
=
new
byte
[
data
.
length
];
-
for
(
int
y
=
0
;
y
<
height
;
y
++)
{
-
for
(
int
x
=
0
;
x
<
width
;
x
++)
-
rotatedData
[
x
*
height
+
height
-
y
-
1
]
=
data
[
x
+
y
*
width
];
-
}
-
int
tmp
=
width
;
// Here we are swapping, that’s the difference to #11
-
width
=
height
;
-
height
=
tmp
;
-
PlanarYUVLuminanceSource
source
=
CameraManager
.
get
().
buildLuminanceSource
(
rotatedData
,
width
,
height
);
到此问题已经解决,非常好,只是有一个问题:兼容性,我现在只确定了在我的M9上完美运行。但是我用的ZXing的版本是1.7的,对于之前的版本来讲当
手机扫描时,手机描绘的可能点与实际有偏差,所以需要修改ViewfinderView.java的onDraw函数,在
Collection<ResultPoint>
currentPossible = possibleResultPoints;前增加
-
Rect
previewFrame
=
CameraManager
.
get
().
getFramingRectInPreview
();
-
float
scaleX
=
frame
.
width
()
/
(
float
)
previewFrame
.
width
();
-
float
scaleY
=
frame
.
height
()
/
(
float
)
previewFrame
.
height
();
将本函数中下边的两个for语句中的canvas.drawCircle(frame.left + point.getX(),
frame.top + point.getY(), 6.0f,
paint);修改为canvas.drawCircle(frame.left + (int) (point.getX() * scaleX), frame.top + (int) (point.getY() * scaleY), 3.0f, paint);注意,是修改两个位置的for语句。
如果您还想将扫描的框变大一些,请修改CameraManager.java中的getFramingRect函数,将framingRect
= new Rect(leftOffset, topOffset, leftOffset + width, topOffset +
height);修改为framingRect = new Rect(0, topOffset, leftOffset * 2 +
width, topOffset + height);这种修改方法会将扫描框的左右两边与屏幕相平。
但是黑色的边框对于用户好像也不太好辨认,所以我又修改了边框的颜色,将ViewfinderView.java文件中的
paint.setColor(frameColor);修改为paint.setColor(laserColor);,这样就修改成了与扫描中间的一
样的颜色,下面贴个图吧!
分享到:
相关推荐
【二维码条形码扫描(竖屏)源码】是一个专门针对手机竖屏模式下的二维码和条形码扫描软件开发的源代码包。这个源码集是开发者基于网络上已有的扫描代码进行了改造和优化,使其更适合在手机竖直方向上进行扫描操作。...
在Android应用开发中,ZXing库(又称为Zebra Crossing)是一个非常流行的开源库,用于创建条形码和二维码的扫描器。这个库为开发者提供了简单的方法来集成条码扫描功能,而无需从零开始编写复杂的图像处理代码。在本...
总结来说,这个主题涵盖了使用XE7进行Android应用开发,利用ZXing库在竖屏模式下实现条码扫描功能的技术细节,对于开发者来说,需要熟悉Android开发环境,了解ZXing的工作原理,以及掌握如何在特定屏幕方向下优化...
描述“ZXing条码扫描器(android竖屏)”强调了这款应用是专为Android设备设计的,并且特别优化了竖屏模式下的扫描体验。在Android手机上,竖屏模式是用户最常用的屏幕方向,因此,确保在竖屏下能稳定、高效地扫描...
ZXing(Zebra Crossing)是一个开源的、跨平台的条码和二维码读取库,它支持多种编码格式,包括但不限于QR码、Data Matrix、UPC、EAN等。...通过以上步骤,我们可以定制一个适合竖屏模式的二维码扫描器,使得用户在近距
ZXing(Zebra Crossing)库就是这样一个强大的开源项目,它为开发者提供了二维码和条形码扫描的功能。本教程将详细介绍如何利用ZXing库在Android应用中实现二维码扫描功能,并以竖屏模式为例进行说明。 首先,我们...
【竖屏二维码扫描】是一个专为适应手机竖向持握设计的二维码识别功能。这个功能是基于著名的开源项目ZXing(Zebra Crossing)进行优化和调整的,旨在提供更友好的用户体验,特别是在单手操作手机时。ZXing是一个强大...
3. **自定义扫描视图**:为了在竖屏模式下保持二维码图像的大小不变,可能需要创建一个自定义的扫描视图,调整CameraPreview的大小和位置,以适应竖屏的屏幕宽度。同时,要确保相机预览的分辨率和二维码的识别区域相...
ZXing,也称为“条形码十字路口”,是一个开源的条码读取库,支持多种格式,包括QR码。在Android上,ZXing库通常通过集成到应用中来实现二维码扫描功能。本项目中的ZXingDemo01可能是基于ZXing库的一个示例工程。 ...
Zxing(又名ZXing,意为“条形码扫描”)是一个开源项目,提供了多种条码和二维码的读取与生成能力。在Android项目中,我们可以使用它的Android端集成库——ZXing Android Embedded,它简化了集成过程。 1. **集成...
ZXing是一个开源的、跨平台的条形码读取库,支持多种类型的条形码和二维码,如QR码、DataMatrix、EAN等。在安卓应用中集成ZXing,可以方便地实现在手机上扫描和生成这些编码。 首先,要使用ZXing实现二维码扫描,...
在Android平台上实现竖屏二维码扫描是一项常见的任务,尤其在开发移动应用时,用户可能需要快速扫描二维码以获取信息或执行特定操作。这个压缩包提供的源码是一个完整的Android应用项目,旨在帮助开发者理解和实现这...
在Android平台上实现竖屏二维码扫描是一项常见的功能,广泛应用于各种应用程序中,如社交、支付、信息获取等场景。本项目是一个Android应用源码开发的Demo,特别适合于毕业设计学习和论文研究。以下是对这个项目的...
在Android平台上,我们可以使用ZXing的`com.google.zxing.client.android.SCAN` Intent来调用系统内建的二维码扫描器,或者直接集成ZXing库开发自己的扫描界面。在iOS上,Apple自iOS 7开始内置了CoreImage框架,可以...
- 这个库不仅包含扫描器,还提供了生成二维码和条形码的功能。 2. **扫描界面布局**: - 在竖屏模式下,需要调整相机预览的布局,确保摄像头捕获的视野适配手机屏幕的高度。通常需要自定义一个SurfaceView或者...
在ZXing的默认配置中,可能不直接支持竖屏扫描,但资源包中的"PortraitZXing-master.zip"可能包含针对竖屏模式的优化和适配,使得扫描界面在竖屏下依然能够正常工作。 4. **位置上移**: 扫描框的位置上移是针对...
通过理解和学习这个“ZXingDemo01”项目,开发者不仅可以掌握如何在Android上实现竖屏二维码扫描,还能深入理解ZXing库的工作原理和Android Camera API的使用,这对于提升Android应用开发技能大有裨益。
8. **测试与优化**:在真机或模拟器上测试扫描功能,确保在竖屏模式下能正常工作。可能需要调整相机预览的大小和位置,以适应不同设备的屏幕尺寸。 以上是基于ZXing库实现竖屏二维码扫描的基本流程。实际开发中,...
4. **初始化相机和扫描器** 在初始化相机时,需要设置合适的预览尺寸,确保与屏幕匹配。ZXing提供了CameraManager类来管理相机,可以调用其方法设置预览尺寸、对焦模式等。同时,需要实例化一个...
这份源码着重展示了如何在Android应用中集成二维码扫描功能,并且保持界面在竖屏模式下正常工作。下面我们将深入探讨这个话题。 首先,要实现二维码扫描,我们需要一个库来处理图像分析和解码。ZXing(Zebra ...