欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# Xamarin利用ZXing.Net.Mobile進行掃碼的方法

 更新時間:2019年06月05日 11:25:15   作者:kiba518  
這篇文章主要介紹了C# Xamarin利用ZXing.Net.Mobile進行掃碼的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

很多人覺得Xamarin的開源少,沒法用來開發(fā)項目。

但,實際上Xamarin已經有很多開源代碼了;只要不是特別特殊的項目,基本上是都可以滿足開發(fā)。

下面我們來看一下Xamarin中利用開源代碼ZXing.Net.Mobile進行掃碼。

引用ZXing.Net.Mobile

在Xamarin中進行掃碼,需要先引用開源代碼ZXing.Net.Mobile。

下面我們先打開Nuget,搜索ZXing.Net.Mobile,如下圖:

然后我們點擊右側安裝。

接著VisualStudio可能會提示我們這樣的錯誤。

錯誤 檢測到 Xamarin.Android.Support.Compat 存在版本沖突。直接從項目引用包可解決此問題。
SalesApp -> Xamarin.Android.Support.Design 25.4.0.2 -> Xamarin.Android.Support.Compat (= 25.4.0.2)
SalesApp -> ZXing.Net.Mobile 2.4.1 -> Xamarin.Android.Support.v4 25.4.0.1 -> Xamarin.Android.Support.Compat (= 25.4.0.1).

這是因為我們選擇安裝的ZXing.Net.Mobile依賴的DLL和我們項目的DLL對應不上。

解決辦法很簡單,選擇下右側ZXing.Net.Mobile的其他版本安裝。

----------------------------------------------------------------------------------------------------

但在VisualStudio2017中有個非??拥牡胤?,就是nuget的引用會將相關dll都組織成一個包,然后一起引用,如下圖:

看上去引用更簡潔,按理說應該是好事,但這里有個問題就是,你引用的dll并沒有被下載到本地。

也就是說,如果你網不好,或者斷網,就別想調試了。

所以最終我還是選擇把相關dll都下載下來,然后直接引用,相關dll如下圖:

使用MobileBarcodeScanner掃碼

本項目里,我們使用ZXing.Net.Mobile下的MobileBarcodeScanner類進行掃碼。

下面簡單介紹下MobileBarcodeScanner的使用方法。

首先,MobileBarcodeScanner類的實例需要調用Scan方法才會進行掃碼。

而Scan方法被調用后,會自己打開了一個Activity。

而這個被打開的Activity的UI,就是,他對應的axml也是可以被自定義的。

自定義的方法就是Scan方法被調用前,為MobileBarcodeScanner類的CustomOverlay屬性賦值。

有興趣的同學可以查看下MobileBarcodeScanner的【源代碼】,更深入的了解一些。

MobileBarcodeScanner的Scan方法有兩個參數。

第一個參數是當前調用掃碼的Activity,也可以傳Null,傳Null的話,MobileBarcodeScanner類里自己找Context為他賦值。

第二個參數是當前掃描的配置屬性;為MobileBarcodeScanningOptions類型。

下面我們看調用代碼。

View zxingOverlay;

MobileBarcodeScanner scanner;

protected override void OnCreate(Bundle savedInstanceState)

{

  base.OnCreate(savedInstanceState);

  SetContentView(Resource.Layout.MainActivity);

  

  Button btnScan = this.FindControl<Button>("btnScan");

  btnScan.Click += (s, e) =>

  { 

    scanner = new MobileBarcodeScanner(); 

    Task t = new Task(AutoScan);

    t.Start();

  }; 

}

async void AutoScan()

{ 

  scanner.UseCustomOverlay = true;

  zxingOverlay = LayoutInflater.FromContext(this).Inflate(Resource.Layout.ZxingOverlay, null); 

  ImageView ivScanning = zxingOverlay.FindViewById<ImageView>(Resource.Id.ivScanning); 

  Button btnCancelScan = zxingOverlay.FindViewById<Button>(Resource.Id.btnCancelScan);

  btnCancelScan.Click += (s, e) =>

  {

    if (scanner != null)

    {

      scanner.Cancel();

    }

  };

 

  zxingOverlay.Measure(MeasureSpecMode.Unspecified.GetHashCode(), MeasureSpecMode.Unspecified.GetHashCode());

  int width = zxingOverlay.MeasuredWidth;

  int height = zxingOverlay.MeasuredHeight; 

 

  // 從上到下的平移動畫

  Animation verticalAnimation = new TranslateAnimation(0, 0, 0, height);

  verticalAnimation.Duration = 3000; // 動畫持續(xù)時間

  verticalAnimation.RepeatCount = Animation.Infinite; // 無限循環(huán)

 

  // 播放動畫

  ivScanning.Animation = verticalAnimation;

  verticalAnimation.StartNow();

      

  scanner.CustomOverlay = zxingOverlay;

  var mbs = MobileBarcodeScanningOptions.Default;

  mbs.AssumeGS1 = true;

  mbs.AutoRotate = true;

  mbs.DisableAutofocus = false;

  mbs.PureBarcode = false;

  mbs.TryInverted = true;

  mbs.TryHarder = true;

  mbs.UseCode39ExtendedMode = true;

  mbs.UseFrontCameraIfAvailable = false;

  mbs.UseNativeScanning = true;

 

  var result = await scanner.Scan(this, mbs);

  HandleScanResult(result);

 

} 

void HandleScanResult(ZXing.Result result)

{

  if (result != null && !string.IsNullOrEmpty(result.Text))

  {

    if (result.Text != null && result.Text.Trim().Length > 5)

    {

      this.RunOnUi(() => { this.ShowToast(result.Text); });

 

    }

    else

    {

      this.RunOnUi(() => { this.ShowToast("掃描無數據"); });

    }

  }

  else

  {

    this.RunOnUi(() => { this.ShowToast("掃描取消"); });

  }

  scanner.Cancel(); 

}

如上代碼所示,我們把項目中寫好的ZxingOverlay.axml賦值給了MobileBarcodeScanner的CustomOverlay屬性。

并且在賦值前,我們?yōu)轫撁鎯鹊腷tnCancelScan按鈕定義了取消事件;同時還定義了一個掃描動畫。

因為定義動畫時,頁面還沒加載出來,所以要取高度進行動畫移動的話,需要先進行下預測。

代碼中調用了Measure方法進行預測,然后再取出預測的高度和寬度MeasuredHeight,MeasuredWidth進行動畫操作。

----------------------------------------------------------------------------------------------------

最終掃描界面如下圖所示:

到此掃碼使用就介紹完了。

框架代碼已經傳到Github上了,歡迎大家下載。Github地址:https://github.com/kiba518/KibaApp

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C#通過正則表達式實現提取網頁中的圖片

    C#通過正則表達式實現提取網頁中的圖片

    本文給大家分享的是使用C#通過正則表達式來實現提取網頁中的圖片的代碼,十分的方便,有需要的小伙伴可以參考下。
    2015-12-12
  • C#實現的三種模擬自動登錄和提交POST信息的方法

    C#實現的三種模擬自動登錄和提交POST信息的方法

    這篇文章主要介紹了C#實現的三種模擬自動登錄和提交POST信息的方法,分別列舉了WebBrowser、WebClient及HttpWebRequest實現自動登錄及提交POST的相關實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Unity3D網格功能生成球體網格模型

    Unity3D網格功能生成球體網格模型

    這篇文章主要為大家詳細介紹了Unity3D網格功能生成球體網格模型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • c# WPF中System.Windows.Interactivity的使用

    c# WPF中System.Windows.Interactivity的使用

    這篇文章主要介紹了c# WPF中System.Windows.Interactivity的使用,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#中使用?record?的好處和最佳場景

    C#中使用?record?的好處和最佳場景

    這篇文章主要介紹了C#中使用?record?的好處,使用?record?類型的主要好處包括簡潔的語法、自動生成的成員、基于值的相等性、非破壞性復制、解構支持、繼承支持和與模式匹配的良好集成,需要的朋友可以參考下
    2024-07-07
  • c#使用正則表達式匹配字符串驗證URL示例

    c#使用正則表達式匹配字符串驗證URL示例

    這篇文章主要介紹了c#使用正則表達式的小示例,匹配字符串、驗證URL,大家參考使用吧
    2013-12-12
  • C#游戲開發(fā)之實現俄羅斯方塊游戲

    C#游戲開發(fā)之實現俄羅斯方塊游戲

    這篇文章主要為大家詳細介紹了C#如何實現經典俄羅斯方塊游戲,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • WPF實現自帶觸控鍵盤的文本框

    WPF實現自帶觸控鍵盤的文本框

    這篇文章實現了WPF自帶觸控鍵盤的文本框,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • C#四舍五入(函數)用法實例

    C#四舍五入(函數)用法實例

    這篇文章主要介紹了C#四舍五入(函數)用法實例,有需要的朋友可以參考一下
    2013-11-11
  • C#實現異步連接Sql Server數據庫的方法

    C#實現異步連接Sql Server數據庫的方法

    這篇文章主要介紹了C#實現異步連接Sql Server數據庫的方法,涉及C#中await方法的相關使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04

最新評論