2016-07-29 44 views
1

UPDATE:ZXing.Mobile - Wie ändert man die Größe des Kamerascanners?

Ich habe versucht, dies in einem App.cs Verfahren implementiert, genannt OpenCameraScanner (Sie dies auf der Seite auf einen Klick nennen würde, von dem Sie scannen möchten):

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); 
} 

Wenn diese Methode aufgerufen wird, ist der zu öffnende Bildschirm jedoch leer und Sie können die Kameraansicht nicht sehen. Nicht sicher warum?


Ich verwende ZXing.Mobile in einem Xamarin.Forms Projekt (für iOS jetzt) ​​für Kamera-Scanning-Funktionalität auf einem iPad.

Derzeit hat ich es funktioniert großartig mit den folgenden zwei Zeilen:

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

Wenn jedoch die Kamera offen zu scannen, es nimmt den gesamten iPad Bildschirm, die wirklich groß ist.

Frage: Gibt es eine Möglichkeit, die Größe der Kameraüberlagerung anzupassen? (So ​​dass es nicht Vollbild)

Ich sehe, dass die scanner.Scan() Methode einen optionalen Parameter des Typs nimmt ZXing.Mobile.MobileBarcodeScanningOptions - Ich habe versucht, das Spiel mit, dass aber die einzig mögliche relevante Option gibt es eine CameraResolutionSelector - aber ich habe eine wirklich harte Zeit, irgendwelche Unterlagen darüber zu finden.

Antwort

1

Es gibt eine ZXing Beispielanwendung, die zeigt, wie die ZXingScannerView und ZXingDefaultOverlay in eine Xamarin.Form ‚s Grid einzubetten:

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

Ich sehe, so sieht es aus wie ich eine benutzerdefinierte verwenden müssen Overlay (https://github.com/Redth/ZXing.Net.Mobile/blob/master/readme.md#custom-overlays) – jbyrd

+0

@jbyrd Sie können das standardmäßige 'ZXingDefaultOverlay' verwenden, wenn Sie dies wünschen, falls das nicht passt Ihr App-Stil, ja Sie können einen benutzerdefinierten erstellen. – SushiHangover

+0

Ich bin immer noch ein wenig verwirrt mit, wie das funktioniert, aber jetzt, alles was ich tun muss, ist die 2 Zeilen, die Sie in meinem ursprünglichen Beitrag sehen. Damit führen wir eine Seite ein (öffnet Scan() grundsätzlich eine Seite?). Wenn ich eine benutzerdefinierte Seite erstelle, wie passen diese 2 Zeilen zusammen ... oder muss ich etwas ganz anderes machen? – jbyrd