0

我正在使用的图像(用于地图图钉)存在一个长期存在的问题,并且随着分辨率的提高,它会变得越来越糟。如果我使用一个图像,只需将它放在可绘制目录中并指定该图像就可以了。可以找到不同尺寸和分辨率的作品。但是,我正在动态地从数据库中提取图像名称。因此,将图像放在资产目录中可以正常工作,但是对于所有分辨率来说,它是唯一的一张图像。现在不好,因为它们现在在高端手机上太小了。

所以我的目标是从数据库中获取图像名称,然后能够使用可绘制目录并具有不同的大小。这似乎是可能的,但我尝试的一切都失败了。

这可以从资源目录中指定一个图像:

public void run(){
    if (!(llat == 0) && !(llon == 0)) {
        if (ests == null || ests.size() == 0
            || poisPinpoints.size() == 0) {
        ests = DBManager.getEstablishments();
        for (Establishment est : ests) {
        try {
        est_pin_bmp = BitmapFactory.decodeResource(getResources(),R.drawable.mil_pushpin);
  poisPinpoints.put(
        est.getPoiType().getPushpin(), est_pin_bmp);
    } catch (Exception e) {
        e.printStackTrace();
            }
        }
    }

当我从数据库中提取多个图像时使用此代码......但它只是资产目录中的一种大小:

public void run(){
if (!(llat == 0) && !(llon == 0)) {
    if (ests == null || ests.size() == 0
        || poisPinpoints.size() == 0) {
    ests = DBManager.getEstablishments();
    for (Establishment est : ests) {
        try {
    Bitmap bm = BitmapFactory
        .decodeStream(PlayPlaces.this
            .getAssets().open(
                est.getPoiType()
                    .getPushpin()));
    poisPinpoints.put(
        est.getPoiType().getPushpin(), bm);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}
4

1 回答 1

0

你可能想看看这个方法Resources.getIdentifier()

有了它,您可以指定如下内容:

String resName = est.getPoiType().getPushpin();
int drawId = getResources().getIdentifier(resName , "drawable", getPackageName());
est_pin_bmp = BitmapFactory.decodeResource(getResources(), drawId);
于 2013-09-01T22:02:49.890 回答