我不断收到错误消息“无法从 int 转换为 Drawable”。我正在尝试将图像分配给地方。有办法解决这个问题吗?

问题描述 投票:0回答:5

我似乎无法在可绘制文件夹中引用我的图像。我那里有图像,但是我不断收到错误消息,指出我无法将 int 转换为 Drawable。我的 R.java 生成的文件中有图像的字符串,但它被设置为“public static Final int Restaurant=0x7f020001;”

package com.CS3040.Places;

import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import com.CS3040.*;
import com.CS3040.Coursework.R;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.OverlayItem;

public class PlaceOverlayItem extends OverlayItem {
    private final GeoPoint point;
    private final Place place;
    private final Drawable marker;

    public PlaceOverlayItem(Place p, String type) {
        super(p.getGeoPoint(), p.getName(), p.getFormatted_address());


        if(type.equals("restaurant")){ this.marker = R.drawable.restaurant;  }

        //super.setMarker(this.marker);
        this.point = p.getGeoPoint();
        this.place = p;
    }

    /**
     * @return the point
     */
    public GeoPoint getPoint() {
        return point;
    }

    /**
     * @return the place
     */
    public Place getPlace() {
        return place;
    }
}
java android overlay drawable
5个回答
20
投票

您需要执行以下操作:

marker = getResources().getDrawable(R.drawable.restaurant);

您收到消息“The method getResources() is undefined for the type PlaceOverlayItem”的原因是因为 getResources() 是从 Context 类继承的方法,因此您必须从 Activity(或其他)调用它或传递上下文按照你的方法。

希望这有帮助


7
投票

我想你想要这样的东西:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.restaurant);
this.marker = bitmap;

或者,使用您的解决方案:

marker = getResources().getDrawable(R.drawable.restaurant);

0
投票

R.drawable.restaurant
是一个常量int,它保存了可绘制资源resturant的id,它不是一个Drawable对象。


0
投票

Kotlin 版本

要将可绘制对象转换为位图,只需使用此代码块

val largeIcon = BitmapFactory.decodeResource(applicationContext.resources, R.drawable.my_large_icon)

0
投票

这是此问题的更新答案。

image.background = getDrawable(context, R.drawable.your_drawable)
© www.soinside.com 2019 - 2024. All rights reserved.