Настроенный вид камеры и вращение в Zxing для QR-кода?

Я работаю с такой большой библиотекой zxing для чтения QR-кода. Я уже получил QR-код успешно.

теперь мое приложение работает в ландшафтном режиме, и камера занимает весь экран, а красный прямоугольник обнаружения QR находится посередине. Я хочу изменить это на портретный режим и заменить вид камеры только красным прямоугольником обнаружения QR.

Я меняю тег CaptureActivity, который находится внутри манифеста библиотеки zxing файл.

android:screenOrientation="portrait".

но не нашел ничего, что я действительно хочу. Я не знаю, где мне нужно изменить/написать код, чтобы сделать это.

3 ответов


Я был в той же проблеме и застрял около 2 дней на нем. На самом деле вы должны выполнить некоторые задачи, чтобы достичь своей цели.

  1. скачать библиотеку Zxing для чтения QR-кода.. (Надеюсь, вы уже)
  2. создайте проект и добавьте библиотеку Zxing.
  3. ваша главная.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>
    
  4. ваша основная деятельность должна выглядеть так:

     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. в файле манифеста добавить разрешение следующий:

     <uses-permission android:name="android.permission.CAMERA"/>
    
  6. и, наконец, очень важная задача, которую вам нужно сделать для проблемы вращения камеры, замените следующий метод на

CameraManager.java (в пакете com.гуглить.кодом ZXing.клиент.андроид.камера)

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

вот и все . бегите и наслаждайтесь: -)

спасибо..


во-первых, пожалуйста, не копируйте наше приложение полностью. В этом случае вам все равно придется написать собственное приложение; это определенно не так просто, как изменение ориентации макета. Не только пользовательский интерфейс не написан для портрета, но и код приложения.

Если вы хотите использовать только фиксированный портретный режим, то это не так сложно. Полностью поддерживая все 4 вращения, с передними / задними камерами, становится трудно получить право. Но не только 1 случай.

Первый вы необходимо разработать интерфейс портретного режима. (Не копируйте дизайн красной линии, пожалуйста.)

фактический код приложения не заботится об ориентации для QR-кодов. Тебе вообще ничего не нужно там делать. Но вам нужно внести изменения, чтобы правильно отобразить экран.

вам нужно будет запросить Camera.getOrientation() чтобы определить, как установлена камера. Обычно это так, что "вверх" находится справа от вас, и я думаю, что почти каждое устройство работает таким образом для совместимости. Но технически вам нужно знать, чтобы вы знали, сколько повернуть изображение предварительного просмотра.

затем вы используете Camera.setDisplayOrientation() чтобы сказать ему, сколько повернуть изображение, чтобы сделать его правильно повернутым для экрана портретного режима. Обычно это "90".

наконец, вам нужно выбрать размер предварительного просмотра с Camera.Parameters.setPreviewSize() но, возможно, вам нужно будет перевернуть выбранные вами значения (480x800 vs 800x480), потому что вы находитесь в портрете.


У меня был действительно ужасный опыт из этой библиотеки по той же причине. Кажется, что даже если вам удастся показать камеру в портретном режиме, она будет растянута (или выходное изображение будет растянуто, или штрих-код не будет ощущаться, или некоторые устройства работали нормально, а другие нет).

Я подозреваю, что Android просто "любит" предварительный просмотр камеры в ландшафтном режиме, так как это его естественная ориентация, когда пользователь делает снимки.

В конце, то, что я сделал, - это использование ландшафтного режима и поворот всего остального, поэтому пользователь думает, что это портретный режим, но это не так. Я думаю, что многие приложения используют эту технику.

Я предлагаю, если вам как-то удастся справиться с этой проблемой, протестируйте ее на как можно большем количестве устройств.