- GridView内で画像を表示するViewを作成する。
- GridViewに画像を設定するためのアダプターを作成する
- データとなるSDカード内の画像を配列に取得する
- グリッドにアダプターを設定する
Android 4.0 / API 14
まずMainActivityのレイアウトです。
GridViewを配置します。
res/layout/activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<GridView
android:id="@+id/gridView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:horizontalSpacing="10dp"
android:numColumns="3"
android:verticalSpacing="10dp" >
</GridView>
</FrameLayout>
次にGridView内で画像を表示するためのレイアウトを作成します。
ImageViewを配置します。
res/layout/grid_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_search" />
</LinearLayout>
画像を設定するためのアダプターを作成します。
ArrayAdapterを継承して作成します。
getView()メソッドでは先ほど作成したレイアウト「grid_item」よりImageViewを取得し画像を設定しています。
public class BitmapAdapter extends ArrayAdapter<Bitmap> {
//GridView内で画像を表示するために作成したレイアウト
private static final int RESOURCE_ID = R.layout.grid_item;
private LayoutInflater mInflater;
public BitmapAdapter(Context context, List<Bitmap> objects) {
super(context, RESOURCE_ID, objects);
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(RESOURCE_ID, null);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);
imageView.setImageBitmap(getItem(position));
return convertView;
}
}
MainActivityのコードです。
Androidではすべての画像はデータベースで管理されており、以下のコードでCursorオブジェクトを取得します。
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
SDカードではなく本体に保存された画像を取得するには、「INTERNAL_CONTENT_URI」を指定します。
Uri uri = MediaStore.Images.Media.INTERNAL_CONTENT_URI;
次にCursorオブジェクトをループし、 MediaStore.Images.Thumbnails.getThumbnail()メソッドでサムネイル画像を取得し配列に格納していきます。
※getThumbnail()メソッドはサムネイル画像がなければ生成して返してくれます。
public class MainActivity extends Activity {
private GridView mGridView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGridView = (GridView)findViewById(R.id.gridView1);
//グリッド4列表示
mGridView.setNumColumns(4);
//表示する画像を取得
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; //SDカード
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
ContentResolver cr = getContentResolver();
ArrayList<Bitmap> lstBitmap = new ArrayList<Bitmap>();
cursor.moveToFirst();
for (int i = 0; i < cursor.getCount(); i++){
long id = cursor.getLong(cursor.getColumnIndexOrThrow("_id"));
Bitmap bmp = MediaStore.Images.Thumbnails.getThumbnail(cr, id, MediaStore.Images.Thumbnails.MICRO_KIND, null);
lstBitmap.add(bmp);
cursor.moveToNext();
}
//アダプター作成
BitmapAdapter adapter = new BitmapAdapter(getApplicationContext(), lstBitmap);
//グリッドにアダプタを設定
mGridView.setAdapter(adapter);
}
}
0 件のコメント:
コメントを投稿