- 画像の読み込み
実際のアプリケーション開発では、ネットワークから画像をダウンロードして表示する必要が頻繁に発生します。Volleyフレームワークには、ネットワークから画像をダウンロードするためのいくつかの方法が提供されています。ここでは主に、ImageRequestとImageLoaderの2つの方法について説明します。
(1) ImageRequest
ImageRequestはStringRequestやJsonObjectRequestと同様に、Requestクラスを継承しており、使用方法も似ています。
private void loadImageWithRequest(){
ImageRequest imageRequest = new ImageRequest(
"https://example.com/sample_image.jpg",
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmapResponse) {
imageView.setImageBitmap(bitmapResponse);
}
}, 0, 0, Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
imageView.setImageResource(R.drawable.default_image);
}
});
requestQueue.add(imageRequest);
}
まずImageRequestを作成します。コンストラクタのパラメータには、画像のURL、ダウンロード成功時のコールバック関数(ここではダウンロードした画像をImageViewに表示しています)、表示する画像の幅と高さ(ここでは0に設定しているため、元のサイズで表示されます)、画像の品質、ダウンロード失敗時のコールバック関数(ここではデフォルト画像を表示)が含まれます。
(2) ImageLoader
場合によっては、ネットワークから画像をダウンロードするのに時間がかかることがあります。そのような場合、ダウンロード中に画像を表示しておくとユーザーエクスペリエンスが向上します。ImageLoaderはこの機能を実現できます。ImageLoaderはRequestクラスを継承しておらず、前述のRequestクラスとは若干異なる使用方法となります。まずImageLoaderとImageListenerを定義し、その後ImageLoaderのget()メソッドを呼び出して画像を取得します。
ImageLoaderの定義:
ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageCache() {
@Override
public void putBitmap(String imageUrl, Bitmap imageBitmap) {
}
@Override
public Bitmap getBitmap(String imageUrl) {
return null;
}
});
ここでrequestQueueはリクエストキューです。
ImageListenerの定義:
ImageListener imageListener = ImageLoader.getImageListener(imageView,
R.drawable.loading_image, R.drawable.error_image);
ここでimageViewは画像を表示するViewです。後続の2つのパラメータは、それぞれダウンロード中に表示する画像と、ダウンロード失敗時に表示する画像です。ここではシンプルにするために、同じ画像を設定しています。
最後に、ImageLoaderのget()メソッドを使用して画像をダウンロードします。
imageLoader.get("https://example.com/sample_image.jpg",
imageListener, 400, 200);
パラメータには、画像のURL、ImageListener、表示する画像の幅と高さが含まれます。