我正在尝试使用sdcard中的照片创建图库。我有一个数据库表。表格中的一列有一条照片的路径。
我将此链接作为指南,但此示例代码从res / drawable目录中检索图像ID。我不知道如何修改它以使我的代码工作。
http://saigeethamn.blogspot.com/2010/05/gallery-view-android-developer-tutorial.html
但如上所述,我想用数据库表中存在的任何图像显示照片。以下代码是ImageAdapter。
public class ImageAdapter extends BaseAdapter {
private Context ctx;
int imageBackground;
public ImageAdapter(Context c) {
ctx = c;
TypedArray ta = obtainStyledAttributes(R.styleable.milestone_style);
imageBackground = ta.getResourceId(R.styleable.milestone_style_android_galleryItemBackground, 1);
ta.recycle();
}
@Override
public int getCount() {
return imagePhotosLocations.length;
}
@Override
public Object getItem(int arg0) {
return arg0;
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int position, View arg1, ViewGroup arg2) {
if (milestones != null && !milestones.isEmpty()) {
Milestone milestone = milestones.get(0);
String imageFileLocation = milestone.getFileLocation();
System.out.println("imageFileLocation="+imageFileLocation);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 26;
Bitmap b;
ImageView iv = new ImageView(ctx);
try {
if (imageFileLocation.startsWith("content://")) {
b = BitmapFactory.decodeStream(getContentResolver().openInputStream(Uri.parse(imageFileLocation)), null, options);
} else {
b = BitmapFactory.decodeFile(imageFileLocation, options);
}
iv.setImageBitmap(b);
iv.setScaleType(ImageView.ScaleType.FIT_XY);
iv.setLayoutParams(new Gallery.LayoutParams(150, 120));
// milestoneImageView.setBackgroundResource(imageBackground);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return iv;
}
return null;
}
}
这是活动中的方法之一。
private String[] imagePhotosLocations;
private void init() {
milestones = getMilestones();
imagePhotosLocations = new String[milestones.size()];
int index = 0;
for (Milestone milestone : milestones) {
imagePhotosLocations[index++] = milestone.getFileLocation();
}
}
private void initializeGallery() {
milestoneImageView = (ImageView) this.findViewById(R.id.imagePhoto);
Gallery milestoneGallery = (Gallery) this.findViewById(R.id.milestoneGallery);
if (milestoneGallery == null) {
throw new IllegalArgumentException("milestoneGallery can not be null.");
}
milestoneGallery.setAdapter(new ImageAdapter(this));
milestoneGallery.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int which, long arg3) {
String imageFileLocation = imagePhotosLocations[which];
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 26;
Bitmap b;
try {
if (imageFileLocation.startsWith("content://")) {
b = BitmapFactory.decodeStream(getContentResolver().openInputStream(Uri.parse(imageFileLocation)), null, options);
} else {
b = BitmapFactory.decodeFile(imageFileLocation, options);
}
milestoneImageView.setImageBitmap(b);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
}
答案 0 :(得分:1)
以下是我使用的步骤,
有时,如果图像太大,将图像加载到位图可能会超出VM预算。请参阅此文章Avoiding out of memory issue while loading image
因此,游标适配器会在代码中返回图像视图。
希望这能回答你的问题。