みんな大好きグリッドビュー。
// 入れ込むべきレイアウト
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);
}
});