私は MediaStore.Images.Media.DATA の文字列を ArrayList から配列に読み取っているので、coverflow ギャラリー アプリの R.drawable フォルダー内の画像の代わりに SD カードの画像を使用できます。レンガの壁にぶつかりました。画像情報の整数型と文字列型の読み取りの問題があります。
SDカードからすべての画像のURIを取得してarraylistに入れることができましたが、次に何をすべきかわかりません。
このアプローチを続ける価値はありますか、それともこれを放棄して別の方法を試して、このカバーフロー アプリの画像のソースを R.drawables フォルダーから SD カードに変更するタスクを実行する方がよいでしょうか。
これが私がしたことです
まず、プロセスの一部として配列を使用して、Android の R.drawable フォルダーから画像を取得する方法を次に示します。
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
private FileInputStream fis;
// private Integer[] mImageIds = {
// R.drawable.pic01,
// R.drawable.pic02,
// R.drawable.pic03,
// R.drawable.pic04,
// R.drawable.pic05,
// R.drawable.pic06,
// R.drawable.pic07,
// R.drawable.pic08,
// R.drawable.pic09
// };
private ImageView[] mImages;
私のアイデアは、カーソルを使用して SD カードからこの「//mnt/sdcard/pic01.png」のような URI を読み取り、この「R.drawable のような R.drawables の配列内のアドレスの代わりにこれらのアドレスを使用することでした。配列内の .pic02"。
これは私がやったことであり、この部分は問題なく機能しました.SDカード上の画像からすべてのURIを取得し、それらをarrayListに保存しました.これまでのところ、すべてがうまく機能しています. Toast を使用して、読み込まれた URI をアクティビティ画面に表示することで、完全に機能することを確認しました。
ArrayList<String> list1 = new ArrayList<String>();
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cur = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String pic = cur.getString(cur.getColumnIndex(MediaStore.Images.Media.DATA));
list1.add(pic);
// Toast.makeText(CoverFlowExample.this, "data name: " + pic, Toast.LENGTH_SHORT).show();
// Log.d("TAG", "ID: " + pic);
}
}
cur.close();
次に、これらの文字列を R.drawables 配列に使用される配列に読み込もうとしましたが、ここで問題が発生しました。プログラムは配列の型として Integer を使用しています。したがって、この配列はURIを読み取るのに間違った場所だと思います。これが間違った場所である場合。今何をする?
Integer[] mImageIds = new Integer[list1.size()];
for(int t = 0; t<= list1.size(); t++){
mImageIds[t]= list1.get(t); // type mismatch cannot convert string to integer
}
Toast.makeText(CoverFlowExample.this, "data name: " + y , Toast.LENGTH_SHORT).show();
私が得ているエラーは、この部分の「型の不一致、文字列を整数に変換できません」です:
mImageIds[t]= list1.get(t);
アプリの getview 部分の残りのコードは次のとおりです。次に何をすべきかを考えています。
public View getView(int position, View convertView, ViewGroup parent) {
//Use this code if you want to load from resources from external source
ImageView i = new ImageView(mContext);
// this method is what someone suggested to use but i don't know how to use this, what do i put for "image" and how to read URIs from arrayList to this?
i.setImageBitmap(BitmapFactory.decodeFile("image_" + position));
// this works for reading in only one image from the SD card into the coverflow app
i.setImageBitmap(BitmapFactory.decodeFile("/mnt/sdcard/pic04.png"));
// when getting from R.drawable images --> i.setImageResource(mImageIds[position]);
i.setLayoutParams(new CoverFlow.LayoutParams(130, 130));
i.setScaleType(ImageView.ScaleType.MATRIX);
return i;
//return mImages[position];
}