条码扫描器是非常棒的一个条码扫描工具,开源的,我查查、快拍二维码都是基于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);,这样就修改成了与扫描中间的一
样的颜色,下面贴个图吧!
分享到:
相关推荐
这里面全是原代码, 而且是竖屏的扫描界面, 是在网络源码的基础上改过的。
使用前请上http://sourceforge.jp/projects/qrcode/下载.jar文件并重命名为SourceForgeQRCode.jar,然后导入项目中。
Android Zxing 扫描条码实现竖屏模式(portrait mode) 摄像头camera 旋转90度 具体实现
ZXing条码扫描器(android竖屏)
介绍了MJ2808条形码扫描器,关于优缺点,以及详细的借口信号。
威纶通触摸屏如何连接条形码扫描枪(扫描仪)_具体步骤?
简单实用的条形码扫描器销售商品,采用的条码机为普通的激光条码机,其识别条码为标准国标码,程序以EN-13为例进行说明
XE7 Android Zxing免安裝 扫描和扫条码实现竖屏模式
QC800条码扫描仪说明 QC800条码扫描仪的详细使用,很多功能等待你使用
这是一款车管所使用的扫描枪监控测试程序,测试工具,主要用于扫描枪设置,能够监控已经连接到电脑的条码扫描仪等设备。支持HHP/Denso/NewLand/Symbol/Metrologic等品牌的条码扫描仪,使用前要设置串口通讯参数。
#资源达人分享计划#
zxing 竖屏直接改竖屏时,扫描的框很小,把扫描框拉大,扫描距离不用拉很长
用C#编写的条形码扫描器销售商品的程序。希望对大家有帮助
安卓电脑条码扫描器是一款是一款安卓手机条码扫描器应用软件,用户只需将安卓手机能和电脑连接,就像扫描枪一样的效果,还支持当下流行的二维码识别,软件还支持摄像头进行一维码,二维码识别,软件界面美观简洁、...
vue-barcode-scanner是现有条形码扫描仪(例如或 )的调节器。 vue-barcode-scanner本身不是扫描工具。 有什么问题 监听器将始终为每个字符输入触发,因此我们需要将其放在一起并检查何时完成并准备使用。 需要为...
两个jar包,一个类演示调用,网上找到的最简便的使用方法,自己实现时,1.申明权限,注册activity;2.拷贝capture.xml布局文件;3.添加资源文件string的最后一条。好资料要共享。
条码扫描仪(枪)模拟键盘源程序~~~ com
Android_条码扫描器_一维条形码_二维QR码_apk_源码
Android Zxing 免安裝 扫描和扫条码实现竖屏模式1