在zxing中更改ViewFinder

时间:2017-07-05 21:27:53

标签: android zxing

当我使用依赖项compile 'me.dm7.barcodescanner:zxing:1.9'而无法访问zxing文件时,如何更改取景器的大小,颜色和其他选项? 我找不到解决这个问题的方法。

2 个答案:

答案 0 :(得分:1)

您可以通过XML

完成
<com.journeyapps.barcodescanner.BarcodeView
      android:id="@+id/zxing_barcode_surface"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:zxing_framing_rect_height="220dp"
      app:zxing_framing_rect_width="250dp" />

<com.journeyapps.barcodescanner.ViewfinderView
    android:id="@+id/zxing_viewfinder_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:zxing_possible_result_points="@color/zxing_custom_possible_result_points"
    app:zxing_result_view="@color/zxing_custom_result_view"
    app:zxing_viewfinder_laser="@color/zxing_custom_viewfinder_laser"
    app:zxing_viewfinder_mask="@color/zxing_custom_viewfinder_mask" />

如果您想以编程方式更改行为,请检查this post(可能与此问题重复)和another one

要访问库功能,需要将以下内容添加到build.gradle文件中:

repositories {
    jcenter()
}

dependencies {
    compile 'me.dm7.barcodescanner:zxing:1.9.3'
}

并为您的AndroidManifest.xml文件添加相机权限:

<uses-permission android:name="android.permission.CAMERA" />

答案 1 :(得分:1)

更改ViewFinder的颜色。 将这些添加到项目的colors.xml

<color name="viewfinder_mask">#3F51B5</color>
<color name="viewfinder_laser">#00FFFFFF</color>
<color name="viewfinder_border">#ffFF4081</color>

进行其他更改,例如从ZXingScannerView的取景器中移除激光 创建一个类并扩展ViewFinderView。覆盖方法以自定义UI 像这样。

public class CustomScannerView extends ZXingScannerView {

public CustomScannerView(Context context) {
    super(context);
}

@Override
protected IViewFinder createViewFinderView(Context context) {
    return new CustomViewFinderView(context);
}

//make changes in CustomViewFinderView to customise the Viewfinder
//Check ViewFinderView class for more modifications
//to change viewFinder's colours override appropriate values in Colors.xml
class CustomViewFinderView extends ViewFinderView {


    public CustomViewFinderView(Context context) {
        super(context);
        setSquareViewFinder(true);
        DisplayMetrics displayMetrics = new DisplayMetrics();
        ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        // DEFAULT SQUARE DIMENSION RATIO in ViewFinderView is 0.625
        // get appropriate Dimension ratio otherwise
        float width = displayMetrics.widthPixels * 0.625f;
        setBorderLineLength((int)width);
    }

    @Override
    public void drawLaser(Canvas canvas) {
        //do nothing for no laser, even remove super call
    }

 }
}

设置取景器的矩形 使用

super.getFramingRect().set(left, top, right, bottom);