2016-07-29 116 views
1

UPDATE:ZXing.Mobile - 如何更改相机扫描仪的尺寸?

我试过在一个名为OpenCameraScanner的App.cs方法实现这一点(你会调用这个从要扫描的页面上点击按钮):

App.cs 
------------------------------------------------ 
public static ZXingScannerPage ScanPage; 
public static ZXing.Result ScanResult; 

public static async void OpenCameraScanner() 
{ 
    ScanPage = new ZXingScannerPage(customOverlay: customOverlay); 
    ScanPage.OnScanResult += (result) => 
    { 
     ScanPage.IsScanning = false; 
     ScanResult = result; 

     Device.BeginInvokeOnMainThread(() => 
     { 
      App.CurrentApp.CurrentPage.Navigation.PopModalAsync(); 
      App.CurrentApp.CurrentPage.DisplayAlert("Scanned Barcode", result.Text, "OK"); 
     }); 
    }; 
    var scanPage = new NavigationPage(ScanPage); 
    await App.CurrentApp.CurrentPage.Navigation.PushModalAsync(ScanPage); 
} 

但是,当调用此方法时,打开的屏幕为空白,并且无法看到它后面的相机视图。不知道为什么?


我在一家Xamarin.Forms项目中使用ZXing.Mobile(iOS设备现在)用于iPad上的相机扫描功能。

目前,我把它用下面的2行工作的伟大:

var scanner = new ZXing.Mobile.MobileBarcodeScanner(); 
var result = await scanner.Scan(); 

然而,当摄像头打开时进行扫描,它占用了整个iPad的屏幕,这是非常大的。

问题:有没有办法调整摄像头覆盖的大小? (所以它不是全屏幕)

我看到scanner.Scan()方法采用ZXing.Mobile.MobileBarcodeScanningOptions类型的可选参数选项 - 我试着用,玩左右,但唯一可能的相关选项有一个CameraResolutionSelector - 但我有很难找到任何相关的文档。

回答

1

有一个斑马线示例应用程序,演示如何嵌入ZXingScannerViewZXingDefaultOverlayXamarin.FormGrid

https://github.com/Redth/ZXing.Net.Mobile/blob/master/Samples/Forms/Core/CustomScanPage.cs

public CustomScanPage() : base() 
{ 
    zxing = new ZXingScannerView 
    { 
     HorizontalOptions = LayoutOptions.FillAndExpand, 
     VerticalOptions = LayoutOptions.FillAndExpand, 
     AutomationId = "zxingScannerView", 
    }; 
    zxing.OnScanResult += (result) => 
     Device.BeginInvokeOnMainThread (async() => { 

      // Stop analysis until we navigate away so we don't keep reading barcodes 
      zxing.IsAnalyzing = false; 

      // Show an alert 
      await DisplayAlert ("Scanned Barcode", result.Text, "OK"); 

      // Navigate away 
      await Navigation.PopAsync(); 
     }); 

    overlay = new ZXingDefaultOverlay 
    { 
     TopText = "Hold your phone up to the barcode", 
     BottomText = "Scanning will happen automatically", 
     ShowFlashButton = zxing.HasTorch, 
     AutomationId = "zxingDefaultOverlay", 
    }; 
    overlay.FlashButtonClicked += (sender, e) => { 
     zxing.IsTorchOn = !zxing.IsTorchOn; 
    }; 
    var grid = new Grid 
    { 
     VerticalOptions = LayoutOptions.FillAndExpand, 
     HorizontalOptions = LayoutOptions.FillAndExpand, 
    }; 
    grid.Children.Add(zxing); 
    grid.Children.Add(overlay); 

    // The root page of your application 
    Content = grid; 
} 
+0

我看到的,所以它看起来像我需要使用自定义覆盖(https://github.com/Redth/ZXing.Net.Mobile/blob/master/readme.md#custom-overlays) – jbyrd

+0

@jbyrd如果您愿意,您可以使用默认的'ZXingDefaultOverlay',如果不匹配你的应用风格,是的,你可以创建一个自定义的风格。 – SushiHangover

+0

虽然我仍然有点困惑,但现在,我所要做的就是调用您在原始帖子中看到的2行。有了这个,我们引入了一个页面(Scan()是否基本打开了一个页面?)。如果我创建了一个自定义页面,那么这两条线怎么适合......或者我需要做一些完全不同的事情? – jbyrd