今回はvolleyを使って画像のサイズを変更して表示する方法を記載します。
動作確認をしたのは、前回と同じく
android:minSdkVersion=”14”
android:targetSdkVersion=”19”
になります。
volleyを使った画像処理で、表示画像サイズを変更する
androidで画像表示をする場合、最近(2014/08)ではvolleyを使うことが一般的になってきました。
サーバーAPIを使うアプリの場合、これまではAsyncTaskを使って複雑怪奇なコードを書くことが多かったのですが、volleyを導入することで随分と処理は楽になりました。
今回はvolleyで取得した画像を、端末の大きさに合わせて拡大表示する方法を実装しました。
以下、ソースコードです。
// ディバイスの幅を取得
float deviceWidth = getDeviceWidth();
// 画像サイズの取得
float display_image_width = bean.image_width;
float display_image_height = bean.image_height;
// 比率
float ratio = deviceWidth / display_image_width;
// ディバイス幅に合わせてwidthを計算
display_image_width = ratio * display_image_width;
// ディバイス高さに合わせてheightを計算
display_image_height = ratio * display_image_height;
// ImageViewの画像サイズを取得して再設定する
RelativeLayout.LayoutParams imageParams = (RelativeLayout.LayoutParams)mImageView.getLayoutParams();
imageParams.width = (int)display_image_width;
imageParams.height = (int)display_image_height;
mImageView.setLayoutParams(imageParams);
// 非同期ローディング処理
ImageListener imageListener = ImageLoader.getImageListener(mImageView, R.drawable.default_image, R.drawable.no_image);
imageLoader.get(bean.image_path, imageListener, (int)display_image_width, (int)display_image_height);
上記のコードの場合、ImageViewがRelativeLayoutの中に記載されていることに注意してください。
getLayoutParams()メソッドでレイアウト情報を取得して、widthとheightを上書きして再設定しています。
上記のソースコードだけを見ると、冗長に見えるかもしれませんが、AsyncTaskとWeakReferenceを使っていた時代のことを思うと格段の進歩です。(キャッシュもvolley側で行ってくれます)
volleyは便利な反面、色々と癖のあるライブラリです。
画像のuploadや、自動リトライ、Basic認証、SSL認証などではまり、色々と苦労をしました。
この辺りの対応テクニックも後日に公開していきたいと思います。
以上
0 件のコメント:
コメントを投稿