2

これを行う方法についてのアドバイスを探しています。

ユーザーがAndroidギャラリーから選択するアクティビティが必要です。その後、画像がアクティビティのグリッドビューに追加されます。私は両方を別々に実装することに成功しましたが、それらを組み合わせる必要があるとき、私は途方に暮れています。グリッドビューのチュートリアルはこちらです。問題は、グリッドビューのチュートリアルでres / drawableの画像を使用しているため、ギャラリーから取得したuriが正確に機能しないことです。

ImageAdapterクラス内で画像を設定するにはどうすればよいですか?携帯電話の画像の1つのURIアドレスを使用してimageView.setImageBitmap(bitmap)を実行しようとしましたが、機能しませんでした。

ギャラリーから取得した画像のURIを含む文字列のArrayListを作成することを考えています。このようにして、画像を簡単に追加、削除、保存できます。

これに伴う他の質問は、画像が表示された場合、単にsetAdapterを再度呼び出すと更新されますか?ソースのArrayListから削除すると、自動的に削除されますか?

ありがとうございました

以下は、私が編集したグリッドビューのコードです。

public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return imageId.size();
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }


        Uri targetUri = Uri.parse(tests.get(0));
        //tests contains the uri of the photo i'm trying to import from my phone gallery in string form
        Bitmap bitmap;
        bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
        imageView.setImageBitmap(bitmap);

        return imageView;
    }
}
4

1 に答える 1

2

最初の部分への回答:テストに選択した画像のURIが含まれている場合は、単に。を使用しますimageView.setImageURI(targetUri)

2番目の部分への回答: GridViewを更新するには、を呼び出すだけで、GridViewmGridView.invalidateViews()全体が再描画されるため、ソースで行われた変更がここに反映されます。setAdapter()を再度呼び出す必要はありません。setAdapter()は、グリッドを初めて描画するときに、最初に1回だけ呼び出されます。その後、invalidateViews()を使用して更新します。

于 2012-08-26T23:07:11.877 に答える