Ich möchte einen Barcode scannen und das Ergebnis zurückgeben. Ich benutze ZXing dafür. Bei Zxing würde das Standard-Overlay zu einer neuen Seite navigieren und der Scan funktioniert perfekt. Ich möchte auf der gleichen Seite bleiben und möchte eine Unteransicht, um die Kamera zu aktivieren und den Scanvorgang zu starten. Kann jemand raten, wie man das macht?Wie man Zebra Xing (Zxing) Zoll Overlay als Unteransicht in Xamarin iOS
MyCode:
MobileBarcodeScanner scanner;
CustomOverlayView customOverlay;
ZXingScannerView scannerView;
UIActivityIndicatorView loadingView;
UIView loadingBg;
public event Action<ZXing.Result> OnScannedResult;
public MobileBarcodeScanningOptions ScanningOptions { get; set; }
public override void ViewDidLoad()
{
camView = new UIView(new CGRect(0, 0, this.View.Frame.Width, this.View.Frame.Height/4)) { BackgroundColor = UIColor.Clear };
scanner = new MobileBarcodeScanner();
Root = new RootElement("ZXingDwatNet.Mobile") {
new Section {
camView
}
};
scannerView = new ZXingScannerView();
camView = scannerView;
loadingBg = camView;// new UIView(this.View.Frame) { BackgroundColor = UIColor.Purple, AutoresizingMask = UIViewAutoresizing.FlexibleDimensions };
loadingView = new UIActivityIndicatorView(UIActivityIndicatorViewStyle.Gray)
{
AutoresizingMask = UIViewAutoresizing.FlexibleMargins
};
loadingView.Frame = new CGRect((this.View.Frame.Width - loadingView.Frame.Width)/4,
(this.View.Frame.Height - loadingView.Frame.Height)/4,
loadingView.Frame.Width/4,
loadingView.Frame.Height/4);
loadingBg.AddSubview(loadingView);
View.AddSubview(loadingBg);
loadingView.StartAnimating();
this.View.InsertSubviewBelow(scannerView, loadingView);
this.View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
scanner.UseCustomOverlay = true;
scanner.CustomOverlay = camView;
var options = new MobileBarcodeScanningOptions
{
AutoRotate = false,
TryHarder = true
};
Task.Run(async() =>
{
var result = await scanner.Scan(options, false);
HandleScanResult(result);
});
}
void HandleScanResult(ZXing.Result result)
{
string msg = "";
if (result != null && !string.IsNullOrEmpty(result.Text))
msg = "Found Barcode: " + result.Text;
else
msg = "Scanning Canceled!";
this.InvokeOnMainThread(() =>
{
var av = new UIAlertView("Barcode Result", msg, null, "OK", null);
av.Show();
});
}
public override void ViewDidAppear(bool animated)
{
scannerView.OnScannerSetupComplete += HandleOnScannerSetupComplete;
camView = scannerView;
//originalStatusBarStyle = UIApplication.SharedApplication.StatusBarStyle;
var opt = new MobileBarcodeScanningOptions();
opt.DelayBetweenContinuousScans = 3000;
ScanningOptions = opt;
if (UIDevice.CurrentDevice.CheckSystemVersion(7, 0))
{
UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.Default;
SetNeedsStatusBarAppearanceUpdate();
}
else
UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.BlackTranslucent, false);
Console.WriteLine("Starting to scan...");
Task.Factory.StartNew(() =>
{
BeginInvokeOnMainThread(() => scannerView.StartScanning(result =>
{
//if (!ContinuousScanning)
//{
// Console.WriteLine("Stopping scan...");
// scannerView.StopScanning();
//}
var evt = this.OnScannedResult;
if (evt != null)
evt(result);
}, this.ScanningOptions));
});
}
void HandleOnScannerSetupComplete()
{
BeginInvokeOnMainThread(() =>
{
if (loadingView != null && loadingBg != null && loadingView.IsAnimating)
{
loadingView.StopAnimating();
UIView.BeginAnimations("zoomout");
UIView.SetAnimationDuration(2.0f);
UIView.SetAnimationCurve(UIViewAnimationCurve.EaseOut);
loadingBg.Transform = CGAffineTransform.MakeScale(2.0f, 2.0f);
loadingBg.Alpha = 0.0f;
UIView.CommitAnimations();
loadingBg.RemoveFromSuperview();
}
});
}
verwenden Sie möchten die Kamera in Ihrem '' 'ScanView''' starten? –
Ja, das von Zxing, das nach Barcode sucht. – TheDeveloper