我正在使用ZXing.Net相机条形码扫描仪,xamarin表单和C#,它看起来很好。但是我有一个问题,如果我通过Navigation.PushAsync()进入下一页,然后单击Back导航按钮,ZXingScannerPage摄像机将不会重新加载.(它将只是最后一张照片的静止图像)...how是否重新加载ZXingScannerPage以便相机在按下Back导航时处于活动状态?是否要刷新附在页面上的相机视图?
发布于 2017-05-04 15:02:27
我发现的允许使用ZXing扫描页进行回显导航的解决方案是,在将页面的新实例推送到导航堆栈之前,删除ZXing扫描页的所有实例。在您的navigation.cs中,当您准备推送页面时,请使用以下命令:
foreach(var x in _navigation.Navigation.NavigationStack.ToList())
{
if((x.GetType() == typeof(/* name of your scanner page */)))
{
_navigation.Navigation.RemovePage(x);
}
}
var page = new /* your scanner page */();
_navigation.PushAsync( /* your scanner page */);发布于 2017-04-25 00:03:25
使用以下代码。扫描完成后立即停止扫描。别做手工操作。
Entry objScanner= new Entry();
objScanner.Placeholder = "Barcode";
objScanner.Keyboard = Keyboard.Numeric;
objScanner.HorizontalOptions = LayoutOptions.StartAndExpand;
objScanner.WidthRequest = Application.Current.MainPage.Width - 40;
objScanner.SetBinding(Entry.TextProperty, "ElementValue", BindingMode.TwoWay);
objScanner.BindingContext = control;
layout.Children.Add(objScanner);
objScanner.Focused += async (s, e) =>
{
var scanPage = new ZXingScannerPage();
await Navigation.PushAsync(scanPage);
scanPage.OnScanResult += (result) =>
{
// Stop scanning
scanPage.IsScanning = false;
// Pop the page and show the result
Device.BeginInvokeOnMainThread(async () =>
{
await Navigation.PopAsync();
objScanner.Text = result.Text;
// await DisplayAlert("Scanned Barcode", result.Text, "OK");
});
};
};发布于 2019-09-10 04:15:41
我找到了一个可能有用的解决办法。在内容页上,创建一个本地内容变量。如果我实例化扫描仪并将它添加到OnAppearing方法中的内容中,那么设置Content = null OnDisappearing方法。取消内容似乎会触发堆栈上必要的清理。
这是我的密码:
public class QrCodeScanPage : ZXingScannerPage
{
View _content;
public QrCodeScanPage()
{
InitScanner();
}
void InitScanner()
{
IsAnalyzing = true;
IsScanning = true;
DefaultOverlayTopText = "Align the barcode within the frame";
DefaultOverlayBottomText = string.Empty;
OnScanResult += ScanPage_OnScanResult;
Title = "Scan Code";
var item = new ToolbarItem
{
Text = "Cancel",
Command = new Command(async () =>
{
IsScanning = false;
await Navigation.PopAsync();
})
};
if (Device.RuntimePlatform != Device.iOS)
item.IconImageSource = "toolbar_close.png";
ToolbarItems.Add(item);
}
void ScanPage_OnScanResult(ZXing.Result result)
{
Device.BeginInvokeOnMainThread(async () =>
{
IsScanning = false;
IsAnalyzing = false;
await Navigation.PushAsync(new QrCodeScanResultPage());
});
}
protected override void OnAppearing()
{
IsScanning = true;
IsAnalyzing = true;
base.OnAppearing();
if (Content != null)
{
_content = Content;
}
if (Content == null)
{
Content = _content;
}
}
protected override void OnDisappearing()
{
base.OnDisappearing();
Content = null;
}
}https://stackoverflow.com/questions/43596760
复制相似问题