Xamarin.Android Binding 源自github第三方庫的綁定(進階教學)----aar檔案

來源:互聯網
上載者:User

標籤:介紹   setimage   sys   命名   pen   文章   using   www   ada   

初級教學(包含Xamarin.GradleBindings外掛程式的安裝)

中級教學

今天我們來到了進階教學,今天要綁定一個Github上將近4000star的一個項目---------Android圖片輪播控制項:  banner

今天會處理不少的Error,這是與初級中級教學,最大的不同部分.

特此感謝,Xamarin University  Chris 老師對這個Banner庫綁定的協助.

 我們先看一下

Let‘s Rock-n-roll

 

1.vs2017----建立Android---單一視圖應用----名稱BannerProject

 

2.解決方案BannerProject--->引用(右鍵)--->Generate Xamarin.Android Bindings via gradle

 

3.在Banner項目的github  readme頁面找到這一句

 

 

Gradle

 

dependencies{    compile ‘com.youth.banner:banner:1.4.10‘  //最新版本}

 

4.根據那個庫的作者所寫的compile

 

,填寫 External dependency id:     com.youth.banner:banner:1.4.10

 

 

5.右鍵解決方案,安裝nuget包:Xamarin.Android.Support.v4

6.重建解決方案.

7.你會得到55個錯誤,43個警告(今天我們只解決錯誤,不解決警告)

今天的重頭戲來了,這是前面的初級和進階教學所不涵蓋的部分,請認真仔細的跟著步驟走

我當時表示一臉懵逼,第一次碰到那麼多的error!!!黑人問號

8.先按常規處理,解決命名空間與類名衝突這個問題.

開啟Binding_Banner項目----->Transforms檔案夾-----Metadata.xml檔案

在metadata裡面添加

<metadata><!-- Renaming the Namespace to make sure we do not have Class names that match Namespace names -->  <attr path="/api/package[@name=‘com.youth.banner‘]" name="managedName">Youth.BannerSdk</attr>  <attr path="/api/package[@name=‘com.youth.banner.transformer‘]" name="managedName">Youth.BannerSdk.Transform</attr>  <attr path="/api/package[@name=‘com.youth.banner.listener‘]" name="managedName">Youth.BannerSdk.Listener</attr>  <attr path="/api/package[@name=‘com.youth.banner.loader‘]" name="managedName">Youth.BannerSdk.Loader</attr>  <attr path="/api/package[@name=‘com.youth.banner.view‘]" name="managedName">Youth.BannerSdk.View</attr></metadata>

 

9.重建解決方案,voila,是不是少了52個錯誤,只有3個錯誤了!!!哈哈哈,神奇神奇真神奇............

10.嗯哼,這三個小毛賊,只是修飾符的問題.

no problem, let‘s do it.

還是在Metadata.xml檔案裡進行操作.

添加以下代碼

<!--  Update visibility of override methods to match Abstract class  -->       <attr path="/api/package[@name=‘com.youth.banner.transformer‘]/class[@name=‘CubeInTransformer‘]/method[@name=‘isPagingEnabled‘ and count(parameter)=0]" name="visibility">protected</attr>    <attr path="/api/package[@name=‘com.youth.banner.transformer‘]/class[@name=‘CubeOutTransformer‘]/method[@name=‘isPagingEnabled‘ and count(parameter)=0]" name="visibility">protected</attr>    <attr path="/api/package[@name=‘com.youth.banner.transformer‘]/class[@name=‘DefaultTransformer‘]/method[@name=‘isPagingEnabled‘ and count(parameter)=0]" name="visibility">protected</attr>

 

 

11.重建解決方案.voila, WTF, 終極Boss出現了??? 

為什麼出現了一個新的錯誤????????

12. 專治小毛賊與老毛賊!!!!!!!!!!!!!!!

還是在Metadata.xml檔案裡進行操作.

添加以下代碼(至於為什麼那麼做,我準備做一個視頻詳細介紹一下,今晚沒太多時間做這個....總之Mark,Mark,Mark)

  <!--  DisplayImage is not Implemented  -->  <remove-node path="/api/package[@name=‘com.youth.banner.loader‘]/class[@name=‘ImageLoader‘]" />

13.重建解決方案,沒有任何的錯誤,是不是? 小毛賊老毛賊都消失了............

========== 全部重建: 成功 2 個,失敗 0 個,跳過 0 個 ==========

Awesome

14.開啟BannerProject\BannerProject\AndroidBindings\Binding_Banner\bin\Debug 找到Binding_Banner.dll檔案,複製到別的地方,然後儲存起來,千萬別弄丟了.

15.我們要幹掉Binding_Banner這個項目,右鍵 移除

 16.在BannerProject項目裡引用剛才儲存的Binding_Banner.dll檔案。

 

 

17.引用Binding_Picasso.dll檔案(這個庫是jar檔案格式的,我已經把它轉成了dll,我把這個庫的github連結留在這裡,你們可以自己去做這個綁定,很簡單的)

https://github.com/square/picasso

compile ‘com.squareup.picasso:picasso:2.5.2‘

因為我們使用Banner這個第三方庫需要使用Picasso這個庫(如果你自己做不好這個綁定,在文章下面留言,我教你,或者把這個picasso.dll發給你)

========================激動人心的時刻到了==========================================

 

==========================================================================

 18.添加MyImageLoader類,讓我們一起來寫吧

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Android.App;using Android.Content;using Android.OS;using Android.Runtime;using Android.Views;using Android.Widget;using Com.Squareup.Picasso;using Youth.BannerSdk.Loader;namespace BannerProject{    public class MyImageLoader : Java.Lang.Object, IImageLoaderInterface    {        public Java.Lang.Object CreateImageView(Context p0)        {            ImageView imageView = new ImageView(p0);            return imageView;        }        public void DisplayImage(Context p0, Java.Lang.Object p1, Java.Lang.Object p2)        {            var temp = p1.ToString();            Picasso.With(p0).Load(temp).Into((ImageView)p2);        }    }}

19.開啟Resources\layout\Main.axml檔案,點擊source, 替換成以下代碼

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <com.youth.banner.Banner xmlns:app="http://schemas.android.com/apk/res-auto"        android:id="@+id/banner"        android:layout_width="match_parent"        android:layout_height="600px" /></LinearLayout>

20.返回到MainActivity, 注意一下命名空間,替換整個OnCreate方法裡的代碼


using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Youth.BannerSdk;
using System.Collections.Generic;



protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); Banner banner = FindViewById<Banner>(Resource.Id.banner); banner.SetBannerStyle(BannerConfig.CircleIndicatorTitle); //================================================================ var titles = new List<string>() { "My name is 1", "My name is 2", "My name is 3", "My name is 4", "My name is 5" }; var images = new List<object> { "http://img.hb.aicdn.com/a0f3cca7aa8e82293c44ef60d8482bb9978499572e121-dr2lA2_fw658", "http://img.hb.aicdn.com/f65b64b9ded69b9b72fccbc2931e6745637953dccf97-WnASP1_fw658", "http://img.hb.aicdn.com/3ccb5d8152c42be1a4801701bd6ac22d5260e2f016298-xljvbk_fw658", "http://img.hb.aicdn.com/8e1a941b74a8a86736b4c3315985dad6c5c6cc301241e-gFIkPc_fw658", "http://img.hb.aicdn.com/6935c4116e47ffb4c39edd0fc4938f99dacb233f136168-0ukCWn_fw658" }; banner.SetImageLoader(new MyImageLoader()); //設定圖片集合 banner.SetImages(images); //----------test----- banner.SetBannerStyle(BannerConfig.CircleIndicatorTitleInside); banner.SetBannerAnimation(Transformer.Accordion); //-----------test--- banner.SetBannerTitles(titles); //banner設定方法全部調用完畢時最後調用 banner.Start(); //=================================================== }

 

21.點擊 開始調試

22.大功告成!!!-------這個Banner庫裡有很多的動畫可以調用-----

banner.SetBannerAnimation(Transformer.Accordion); //修改Transformer.後面的代碼就可以了

 

 

PS:如果你想深入研究這個庫的用法,反正我們已經轉成dll了,而且已經學會了基本的操作,你只要按照github上作者的介紹一步步做就可以了,或者你直接閱讀源碼或者文檔.

添加許可權到你的 AndroidManifest.xml(在Properties裡面,在引用的上面,仔細找一下,就能找到這個檔案)
<!-- if you want to load images from the internet --><uses-permission android:name="android.permission.INTERNET" /> <!-- if you want to load images from a file OR from the internet --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我的項目就沒添加這兩行,尤其是第一行,好像也沒什麼問題,具體看你的真機或者是模擬器的情況吧。
好吧,今天就到這裡了.

Xamarin.Android Binding 源自github第三方庫的綁定(進階教學)----aar檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.