Не удается преобразовать растровое изображение в Drawable, почему я получаю эту ошибку?

1

Я потратил около 3 часов, пытаясь понять это, и кажется, что это так просто, но я не могу его обработать! Может кто-нибудь, пожалуйста, помогите мне! Все, что я хочу, чтобы он отображал изображение из папки доступных ресурсов. В нем говорится, что "невозможно преобразовать из Bitmap в Drawable".

package com.CS3040.Places;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import com.CS3040.*;
import com.CS3040.Coursework.R;

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

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

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

        if(type.equals("restaurant"))
        { 
            //this.marker =
            Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.restaurant);
            this.marker = bmp;

        } 

        //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;
    }

    }
Теги:
drawable
bitmap

3 ответа

1
Лучший ответ

Ну это правильно - Bitmap не расширяет Drawable. Я не занимался разработкой Android, но похоже, что вы хотите BitmapDrawable:

Resources resources = context.getResources();
Bitmap bmp = BitmapFactory.decodeResource(resources, R.drawable.restaurant);
this.marker = new BitmapDrawable(resources, bmp);
  • 0
    Я только собирался упомянуть, что я попробовал это, и я получаю и ошибку «Пустой конечный маркер поля, возможно, не был инициализирован» в «public PlaceOverlayItem (Контекст контекста, Place p, Тип строки) {super (p.getGeoPoint ()» , p.getName (), p.getFormatted_address ()); "
  • 0
    То другая ошибка - после того, как ваш , if положить else this.marker = null поэтому marker всегда будет получить какое - то значение
Показать ещё 1 комментарий
0

измените это:

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

к этому:

Drawable d = context.getResources().getDrawable(R.drawable.restaurant);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
this.marker = d;
  • 0
    я сделал это, однако, я получаю сообщение об ошибке в общедоступном PlaceOverlayItem (Контекст контекста, Place p, тип String), который говорит: «Пустой конечный маркер поля, возможно, не был инициализирован». Спасибо за вашу помощь.
0

Вы должны получить свой ресурс как Drawable:

if(type.equals("restaurant"))
{ 
    this.marker = context.getResources().getDrawable(R.drawable.restaurant);
} else {
    // marker would get no value without that else case - not allowed if you declare it final
    this.marker = null;
}
  • 0
    я сделал это, однако, я получаю сообщение об ошибке в общедоступном PlaceOverlayItem (Контекст контекста, Place p, тип String), который говорит: «Пустой конечный маркер поля, возможно, не был инициализирован». Спасибо за вашу помощь.
  • 0
    см обновленный ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню