Android中的QR码与zbar
我的qrreader有问题 我只需要在中央屏幕上扫描 我需要一个正方形,在扫描二维码之前,我必须在那里放置二维码 我尝试在FrameLayout中添加边距,但在框架上有黑色屏幕 这是我的xml文件:Android中的QR码与zbar,android,camera,qr-code,Android,Camera,Qr Code,我的qrreader有问题 我只需要在中央屏幕上扫描 我需要一个正方形,在扫描二维码之前,我必须在那里放置二维码 我尝试在FrameLayout中添加边距,但在框架上有黑色屏幕 这是我的xml文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/Relati
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/cameraPreview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_weight="1"
>
</FrameLayout>
<TextView
android:id="@+id/scanText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="Scanning..."
android:layout_marginTop="20dp"
android:textColor="@android:color/white"
android:textSize="21sp" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="@drawable/prv" />
<Button
android:id="@+id/ScanButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:visibility="invisible"
android:text="Scan" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="Button"
android:onClick="turnFlash"
/>
</RelativeLayout>
我正在使用Zbar库。看看我的应用程序JustScan(可以在code.google.com上找到eclipse项目),在那里我使用了与您相同的示例代码,并根据需要对其进行了修改 其思想是重写CameraPreview类的方法draw(Canvas Canvas),在这里可以为扫描区域绘制矩形。要确保调用重写的方法,必须在方法surfaceCreated(…)中调用setWillNotDraw(false) 要将预览裁剪到扫描区域,请先使用图像方法setCrop(…)裁剪条形码图像,然后再将其传递到previewCallback函数中的方法onPreviewFrame(…)中的scanImage() 很抱歉,这是一个非常简短的解释,但我不能在这里列出完整的代码。希望它能有所帮助……请注意,不鼓励这样做,因此答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移往往会过时)。请考虑在这里添加一个独立的概要,将链接作为参考。
PreviewCallback previewCb = new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
Camera.Parameters parameters = camera.getParameters();
Size size = parameters.getPreviewSize();
Image barcode = new Image(size.width, size.height, "Y800");
barcode.setData(data);
int result = scanner.scanImage(barcode);
if (result != 0 && !is_checking) {
is_checking = true;
String text="";
SymbolSet syms = scanner.getResults();
for (Symbol sym : syms) {
text = sym.getData();
}
if(text.substring(0, 3).matches("htt|www")){
previewing = false;
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
scanText.setText(text);
v.vibrate(500);
try{
if(text.substring(0, 3).equalsIgnoreCase("www")){
scanText.setText("http://"+scanText.getText().toString());
}
startWebsite(scanText.getText().toString());
}catch(Exception e){
}
}
is_checking = false;
}
}
};