こんにちはすべて、私の問題をたくさん検索しましたが、同様の問題の投稿が多数見つかりましたが、誰も私に正しい解決策を教えてくれませんでした。 私が望むのは、sdcardフォルダの画像を表示するgridviewです。私も写真を撮る可能性を提供しなければならず、グリッドビューに戻るときに新しい画像で更新してください。sdcardのサブフォルダの画像をgridviewに表示し、変更時に更新します
写真を撮るために、私はこのコードを使用:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, getImageFileUri());
startActivityForResult(intent, TAKE_PICTURE_ACTIVITY);
getImageFileUriは()関数は、SDカードのパスを取得するにはEnvironment.getExternalStorageDirectory()を使用して、タイムスタンプを持つ私に絵の名前を与えることで
、およびフォルダが存在するかどうかをチェックします(存在しない場合は作成します)。瞬間のために
は、私は私の画像を取得するには、カーソルを使用します。
private void displayGallery() {
// Query params :
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Images.Media._ID};
String selection = MediaStore.Images.Media.DATA + " like ? ";
String[] selectionArgs = {"%Otiama%"};
// Submit the query :
mCursor = managedQuery(uri, projection, selection, selectionArgs, null);
if (mCursor != null) {
mGridView.setOnItemClickListener(this);
mGridView.setAdapter(new ImageAdapter(this, mCursor));
}
else showToast("Gallery is empty : " + uri.toString());
}
そして、ここでは私のアダプタのgetViewメソッドです:
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
// Move cursor to current position
mCursor.moveToPosition(position);
// Get the current value for the requested column
int columnIndex = mCursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
int imageID = mCursor.getInt(columnIndex);
// obtain the image URI
Uri uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID));
String url = uri.toString();
// Set the content of the image based on the image URI
int originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length()));
Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(mContext.getContentResolver(), originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null);
imageView.setImageBitmap(b);
return imageView;
}
このコードは動作しますが、非常に遅いとしませんonActivityResult()のdisplayGallery()関数を再度呼び出す場合でも、新しい画像のサムネイルは作成されません。アプリをリロードしても更新されません> <。私は日食から再びそれを実行する必要があります。
実際には、ESファイルエクスプローラと同じ動作があります(フォルダを開くと、画像にはすべてプレビュー画像があり、非同期に読み込まれます)。それら* *サムネイル。
ビットマップファクトリを使用してビットマップとして写真を読み込もうとしましたが、数枚の写真(1-2枚)でも即座に「java.lang.OutOfMemoryError:ビットマップサイズがVMの予算を超えています」私はそれらのサイズを変更する必要があると思いますが、私がそうするなら、私は20-30枚の写真をロードするときに同じエラーがありませんか?または、問題は各写真が予算を超えていることです。サイズを変更すると、このエラーはすべて回避されますか?誰かが...