Picassoを使えば、画像ダウンロードやキャッシュを効率的に行ってくれるという情報があったので、Xamarin Visual Studioでサンプルアプリを作ってみました。
スポンサーリンク
「PiccasoTest」という名前にしました。(Picassoのスペル間違えました。。。)
まず、プロジェクト「PiccasoTest」を作成

Picassoのライブラリを追加
PicassoのライブラリはNugetで追加します。
ツール>Nugetパッケージマネージャー>パッケージマネージャーコンソール

「Install-Package Square.Picasso」と入力しEnterキーを押すと、
インストールされます。

いろいろインストールされていますね。
参照に「Square.OkHttp」、「Square. OkIO」、「Square. Picasso」が追加されました。

Main.axmlに、Plain Text、Button、ImageViewを追加しました。

Plain Textには、画像のURLを入力しておいて、Buttonをクリックしたら、ImageViewに画像が表示される予定です。
Main.axmlのコードは以下です。
<?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"
android:minWidth="25px"
android:minHeight="25px">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText1"
android:text="https://became-free.com/wp-content/uploads/2017/04/sample_0.jpg" />
<Button
android:text="画像表示"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button1" />
<ImageView
android:src="@android:drawable/ic_menu_gallery"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/imageView1" />
</LinearLayout>
MainActivity.csのコードを下のように書き換えました。
using Android.App;
using Android.Widget;
using Android.OS;
using System;
using Square.Picasso;
namespace PicassoTest
{
[Activity(Label = "PicassoTest", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
EditText txtURL = FindViewById<EditText>(Resource.Id.editText1);
Button btnDispImage = FindViewById<Button>(Resource.Id.button1);
ImageView ivImage = FindViewById<ImageView>(Resource.Id.imageView1);
btnDispImage.Click += (object sender, EventArgs e) =>
{
if (String.IsNullOrWhiteSpace(txtURL.Text))
{
}
else
{
Picasso.With(this).Load(txtURL.Text).Into(ivImage);
}
};
}
}
}
起動してみました。

画像表示ボタンをクリックします。

成功しました。
エミュレータだとなぜか動作しますが、実機で起動する場合、
AndroidマニフェストでINTERNETのパーミッションを設定しておく必要があります。

PicassoでBasic認証
画像ファイルがBasic認証の設定されているサーバーにある場合は、
JakeWharton.Picasso2OkHttp3Downloaderというライブラリを利用します。
ツール>Nugetパッケージマネージャー>パッケージマネージャーコンソールで、
「 Install-Package JakeWharton.Picasso2OkHttp3Downloader 」と入力しEnterキーを押すと、
インストールされます。
そして、MainActivity.csのコードを下のように書き換えます。
using Android.App;
using Android.Widget;
using Android.OS;
using System;
using Square.Picasso;
using JakeWharton.Picasso;
using Square.OkHttp3;
namespace PicassoTest
{
[Activity(Label = "PicassoTest", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
EditText txtURL = FindViewById<EditText>(Resource.Id.editText1);
Button btnDispImage = FindViewById<Button>(Resource.Id.button1);
ImageView ivImage = FindViewById<ImageView>(Resource.Id.imageView1);
//Basic認証のuserとpasswordを書き換えて使用してください。
string credential = Credentials.Basic("user", "password");
var client = new OkHttpClient.Builder()
.AddInterceptor(chain =>
{
var newRequest = chain.Request()
.NewBuilder()
.AddHeader("Authorization", credential)
.Build();
return chain.Proceed(newRequest);
})
.Build();
// create the picasso handle
var picasso = new Picasso.Builder(this)
.Downloader(new OkHttp3Downloader(client))
.Build();
Picasso.SetSingletonInstance(picasso);
btnDispImage.Click += (object sender, EventArgs e) =>
{
if (String.IsNullOrWhiteSpace(txtURL.Text))
{
}
else
{
Picasso.With(this).Load(txtURL.Text).Into(ivImage);
}
};
}
}
}
「Basic認証のuserとpasswordを書き換えて使用してください。」と書いてあるところの下の、userとpasswordを実際の値に書き換えると使用できます。