みんな大好きグリッドビュー。
// 入れ込むべきレイアウト GridView gridView = (GridView) v.findViewById(R.id.gridView); gridView.setAdapter(new ImageAdapter(context, imageUrlList));
こうやって使いまっさ。ImageAdapterは独自のもの。そこに、context imageUrlListを渡します。
しかし、GridView、文字をいれるだけだと楽勝であるのだが、ネットから画像をよみこんでいれるとなるときっついのだ。それぞれの大きさがバラバラになったりして泣きそうになるのだ。他のサイトではすごく簡単にやり遂げているが。
import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.support.v4.util.LruCache; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import com.android.volley.RequestQueue; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.Volley; import java.util.List; /** * イメージローダー */ public class ImageAdapter extends ArrayAdapter<String> { public final String TAG = "ImageAdapter"; private Context context; private RequestQueue mQueue; private ImageLoader mImageLoader; public ImageAdapter(Context context, List<String> objects) { super(context, 0, objects); this.context = context; mQueue = Volley.newRequestQueue(getContext()); mImageLoader = new ImageLoader(mQueue, new BitmapCache()); } @Override public View getView(int position, View convertView, ViewGroup parent) { String url = getItem(position); ImageView imageView; if (convertView == null) { imageView = new ImageView(getContext()); } else { imageView = (ImageView) convertView; } // 画像取得処理 ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, android.R.drawable.ic_menu_rotate, android.R.drawable.ic_delete); // BASIC認証 mImageLoader = new BasicAuthImageLoader(mQueue, new ImageLoader.ImageCache() { private final LruCache<String, Bitmap> mCache = new LruCache<String, Bitmap>(100); public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); } public Bitmap getBitmap(String url) { return mCache.get(url); } }); mImageLoader.get(url, listener); // 画像のサイズをここで固定 imageView.setMinimumWidth(300); imageView.setMinimumHeight(200); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); // クリックイベント imageView.setOnClickListener(new View.OnClickListener() { public String url; public View.OnClickListener setUrl(String url) { this.url = url; return this; } public void onClick(View v) { // イメージ画像がクリックされたときに実行される処理 Log.d(TAG, "url= " + url); // 画面遷移 Intent intent = new Intent(context, TSUGINO_GAMEN.class); intent.putExtra("photoUrlAddress", url); context.startActivity(intent); } }.setUrl(url) ); return imageView; } }
ここで、
// 画像のサイズをここで固定
imageView.setMinimumWidth(300);
imageView.setMinimumHeight(200);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
これが必要だった。setScaleTypeはおこのみで。
クリックイベントにも注目。
// クリックイベント imageView.setOnClickListener(new View.OnClickListener() { public String url; public View.OnClickListener setUrl(String url) { this.url = url; return this; } public void onClick(View v) { // イメージ画像がクリックされたときに実行される処理 Log.d(TAG, "url= " + url); // 画面遷移 Intent intent = new Intent(context, TSUGINO_GAMEN.class); intent.putExtra("photoUrlAddress", url); context.startActivity(intent); } }.setUrl(url) );
setUrlを使ってurlをイベントリスナー内に入れ込んでいる。イベントに値を渡す方法。少し凝ったことをしたいなら必要になってくるだろう。
BASIC認証は使わないだろうからはずしてもいいじゃろう。
// BASIC認証 mImageLoader = new BasicAuthImageLoader(mQueue, new ImageLoader.ImageCache() { private final LruCache<String, Bitmap> mCache = new LruCache<String, Bitmap>(100); public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); } public Bitmap getBitmap(String url) { return mCache.get(url); } });