我正在與這樣一個偉大的庫zxing讀取QR碼。我已經成功地獲得了QR碼。Zxing中的QR碼自定義攝像頭視圖和旋轉?
現在,我的應用程序運行在橫向模式下,相機拍攝整個屏幕,紅色QR檢測矩形框位於中間。我想將其改爲肖像模式&用紅色QR檢測矩形框替換相機視圖。
我更改了zxing庫清單文件中的CaptureActivity標記。
android:screenOrientation="portrait"
。
但是什麼都沒發現,我真正想要的。我不知道我必須更改/編寫代碼才能獲得此內容。
我正在與這樣一個偉大的庫zxing讀取QR碼。我已經成功地獲得了QR碼。Zxing中的QR碼自定義攝像頭視圖和旋轉?
現在,我的應用程序運行在橫向模式下,相機拍攝整個屏幕,紅色QR檢測矩形框位於中間。我想將其改爲肖像模式&用紅色QR檢測矩形框替換相機視圖。
我更改了zxing庫清單文件中的CaptureActivity標記。
android:screenOrientation="portrait"
。
但是什麼都沒發現,我真正想要的。我不知道我必須更改/編寫代碼才能獲得此內容。
我在同樣的問題,並陷入了約2天。 其實你必須做一些任務來實現你的目標。
讀QR碼你的main.xml文件應該是這樣:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal">
<include layout="@layout/capture"/>
</FrameLayout>
</LinearLayout>
您的主要活動應該是這樣的:
public class ScannerActivity extends CaptureActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void handleDecode(Result rawResult, Bitmap barcode)
{
Toast.makeText(this.getApplicationContext(), "Scanned code " + rawResult.getText(), Toast.LENGTH_LONG).show();
}
}
在manifest文件中添加以下權限:
<uses-permission android:name="android.permission.CAMERA"/>
最後非常重要的任務,你需要對相機rotatio做Ñ問題中,將以下方法進
CameraManager.java(在包com.google.zxing.client.android.camera)
@SuppressLint("NewApi") public void startPreview() {
Camera theCamera = camera;
if (theCamera != null && !previewing) {
theCamera.setDisplayOrientation(90);
theCamera.startPreview();
previewing = true;
}
}
僅此而已。運行並享受:-)
謝謝..
您必須擴展它前級CaptureActivity更改爲非決賽。 – 2013-10-25 05:57:43
任何人在Delphi XE5中使用它? – 2014-03-25 14:18:00
由於同樣的原因,我從這個庫中獲得了非常可怕的經驗。看起來,即使您在縱向模式下顯示相機,它也會被拉長(或者輸出圖像會被拉伸,或者條形碼不會被感知,或者某些設備工作正常,而其他設備則無法正常工作)。
我懷疑Android只是簡單地「喜歡」相機預覽處於橫向模式,因爲這是用戶拍照時的自然方向。
最後,我所做的是使用橫向模式並旋轉其他所有東西,所以用戶認爲它是縱向模式,但事實並非如此。我認爲很多應用都使用這種技術。
我建議,如果您以某種方式設法解決這個問題,請在儘可能多的設備上進行測試。
庫本身完全不關心的方向。該應用程序是景觀而已,所以你不能使用它的肖像 - 但你應該寫反正一個新的應用程序。安卓相機「通常」安裝,以便風景是自然的方向,但你必須查詢的API實際上肯定知道!是的,您實際上不必旋轉圖像,但您必須正確匹配預覽分辨率和旋轉。 – 2013-03-23 23:07:23
你有什麼樣展示如何做到這一點,對於簡單的攝像頭應用程序(預覽和捕獲),一個用於這個庫? – 2013-03-24 06:57:52
問題是沒有足夠的示例/教程。只有這個程序笑 – 2013-11-19 14:21:25
首先,請不要完全複製我們的應用程序。在這種情況下,你將需要編寫自己的應用程序;這絕對不像改變佈局方向那麼簡單。用戶界面不僅不是爲了肖像而編寫的,也不是應用程序代碼。
如果你想使用只有固定肖像模式,那麼這並不難。使用前置/後置攝像頭完全支持所有4次旋轉,很難得到正確的結果。但不僅僅是一例。
首先你需要設計一個肖像模式的用戶界面。 (請不要複製紅線設計。)
實際的應用程序代碼不關心QR碼的方向。你根本不需要做任何事情。但是您需要進行更改才能正確顯示屏幕。
您需要查詢Camera.getOrientation()
來檢測攝像機的安裝方式。通常情況下,「向上」就在您的右側,我認爲幾乎所有設備都以這種方式兼容。但從技術上講,您需要知道如何旋轉預覽圖像。
然後,您使用Camera.setDisplayOrientation()
來告訴它旋轉圖像的旋轉程度,以使其正確旋轉至肖像模式屏幕。這通常是「90」。
最後,您需要選擇Camera.Parameters.setPreviewSize()
的預覽尺寸,但可能需要翻轉您選擇的值(480x800與800x480),因爲您的肖像正在顯示。
調整很簡單,但需要多個文件間的一點變化。在這裏,我已經把一個完整的解決方案這個問題:http://stackoverflow.com/questions/16252791/how-to-show-zxing-camera-in-portrait-mode-android/16252917#16252917 – Roylee 2013-04-27 14:55:24
@Roylee:謝謝,你的代碼也運行以及.. – 2013-06-23 10:46:37