2013-03-23 30 views
8

Tôi đang làm việc với một thư viện tuyệt vời để đọc mã QR. Tôi đã có mã QR thành công.Chế độ xem và xoay ảnh tùy chỉnh trong Zxing cho mã QR?

Hiện tại, ứng dụng của tôi chạy ở chế độ ngang và máy ảnh chụp toàn bộ màn hình và hộp hình chữ nhật phát hiện QR màu đỏ ở giữa. Tôi muốn thay đổi chế độ này thành chế độ dọc & chỉ thay thế chế độ xem máy ảnh bằng hộp hình chữ nhật phát hiện QR màu đỏ.

Tôi thay đổi thẻ CaptureActivity nằm bên trong tệp kê khai thư viện zxing.

android:screenOrientation="portrait".

Nhưng không tìm thấy thứ gì tôi thực sự muốn. Tôi không biết nơi tôi phải thay đổi/viết mã để có được điều này.

+1

Tinh chỉnh rất đơn giản, mặc dù cần một chút thay đổi trên nhiều tệp. Ở đây tôi đã đặt một giải pháp hoàn chỉnh cho câu hỏi này: http://stackoverflow.com/questions/16252791/how-to-show-zxing-camera-in-portrait-mode-android/16252917#16252917 – Roylee

+1

@Roylee: cảm ơn, mã của bạn cũng chạy tốt .. –

Trả lời

5

Tôi đã gặp vấn đề tương tự và bị kẹt khoảng 2 ngày. Thực ra bạn phải thực hiện một số nhiệm vụ để đạt được mục tiêu của mình.

  1. Tải ZXing thư viện để đọc mã QR .. (Hy vọng bạn có được)
  2. Tạo một dự án và thêm thư viện ZXing.
  3. tập tin main.xml của bạn sẽ giống như thế:

    <?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> 
    
  4. Hoạt động chính của bạn sẽ giống như thế:

    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(); 
         } 
        } 
    
  5. Trong file manifest thêm quyền sau:

    <uses-permission android:name="android.permission.CAMERA"/> 
    
  6. và cuối cùng là nhiệm vụ QUAN TRỌNG bạn cần làm để quay camera n vấn đề, thay thế các phương pháp sau đây vào

CameraManager.java (trong com.google.zxing.client.android.camera gói)

@SuppressLint("NewApi") public void startPreview() { 
    Camera theCamera = camera; 
    if (theCamera != null && !previewing) { 
     theCamera.setDisplayOrientation(90); 
     theCamera.startPreview(); 
     previewing = true; 
    } 
    } 

đó là tất cả. chạy và tận hưởng :-)

cảm ơn ..

+0

Bạn phải thay đổi lớp CaptureActivity thành không cuối cùng trước khi mở rộng nó. –

+0

Bất cứ ai sử dụng nó trong Delphi XE5? –

1

Tôi đã có trải nghiệm thực sự khủng khiếp từ thư viện này vì lý do tương tự. Dường như ngay cả khi bạn hiển thị thành công máy ảnh ở chế độ dọc, nó sẽ bị kéo dài (hoặc hình ảnh đầu ra sẽ bị kéo căng hoặc mã vạch sẽ không bị phát hiện hoặc một số thiết bị hoạt động tốt nhưng những người khác thì không).

Tôi nghi ngờ rằng Android chỉ "thích" xem trước máy ảnh ở chế độ ngang, vì đây là định hướng tự nhiên của nó khi người dùng chụp ảnh.

Cuối cùng, những gì tôi đã làm là sử dụng chế độ ngang và xoay mọi thứ khác, vì vậy người dùng cho rằng đó là chế độ dọc, nhưng không phải. Tôi nghĩ rằng nhiều ứng dụng sử dụng kỹ thuật này.

Tôi đề nghị rằng nếu bạn bằng cách nào đó quản lý để xử lý vấn đề này, hãy thử nó trên nhiều thiết bị nhất có thể.

+0

Bản thân thư viện không quan tâm đến định hướng. Ứng dụng này chỉ dành cho cảnh quan, do đó bạn không thể sử dụng ứng dụng này cho ảnh chân dung - nhưng dù sao thì bạn cũng phải viết một ứng dụng mới. Máy ảnh Android được "thường" gắn kết để cảnh quan là định hướng tự nhiên nhưng bạn phải truy vấn API để thực sự biết chắc chắn! Có, bạn không thực sự phải xoay hình ảnh, nhưng bạn phải khớp với độ phân giải và xoay vòng xem trước một cách chính xác. –

+0

Bạn có mẫu nào để chỉ cách thực hiện, cho cả ứng dụng máy ảnh đơn giản (xem trước và chụp) và một cho thư viện này? –

+0

Vấn đề là không có ví dụ/hướng dẫn đầy đủ. Chỉ ứng dụng này lol –

5

Trước tiên, vui lòng không sao chép hoàn toàn ứng dụng của chúng tôi. Trong trường hợp này, bạn sẽ cần phải viết ứng dụng của riêng bạn anyway; nó chắc chắn không đơn giản như thay đổi hướng bố trí. Không chỉ giao diện người dùng không được viết cho ảnh chân dung, nhưng không phải là mã ứng dụng.

Nếu bạn chỉ muốn sử dụng chỉ chế độ dọc cố định thì điều này không quá khó. Hỗ trợ đầy đủ tất cả 4 phép quay, với máy ảnh trước/sau, khó có được quyền. Nhưng không chỉ 1 trường hợp.

Trước tiên, bạn cần thiết kế giao diện người dùng chế độ dọc. (Đừng sao chép thiết kế đường đỏ.)

Mã ứng dụng thực tế không quan tâm đến định hướng cho mã QR. Bạn không phải làm gì cả. Nhưng bạn cần phải thực hiện thay đổi để hiển thị màn hình ngay.

Bạn sẽ cần truy vấn Camera.getOrientation() để phát hiện cách máy ảnh được lắp. Thông thường nó là như vậy mà "lên" là quyền của bạn, và tôi nghĩ rằng chỉ là về mọi thiết bị hoạt động theo cách này cho khả năng tương thích. Nhưng về mặt kỹ thuật, bạn cần phải biết bạn biết xoay vòng hình ảnh xem trước bao nhiêu.

Sau đó, bạn sử dụng Camera.setDisplayOrientation() để cho biết mức độ xoay hình ảnh để xoay hình ảnh chính xác cho màn hình chế độ dọc. Điều này thường là "90".

Cuối cùng, bạn cần phải chọn kích thước xem trước với Camera.Parameters.setPreviewSize() nhưng có thể sẽ cần phải lật các giá trị bạn đã chọn (480x800 so với 800x480) vì bạn đang ở chế độ dọc.

Các vấn đề liên quan