У меня есть изображения, которые я присвоил определенным местам, я знаю, что код возвращает места, но не отображает их на карте. - PullRequest
0 голосов
/ 15 марта 2012

У меня есть все изображения в drawable-hdpi. мне нужно поместить их в другие файлы для рисования? может ли кто-нибудь дать мне пример того, как обрабатывать каждое утверждение с наложением?

package com.CS3040.Places;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
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;
    //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 = new BitmapDrawable(context.getResources(), bmp);

            //Drawable d = context.getResources().getDrawable(R.drawable.restaurant);
            //d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
            //this.marker = d;

//          Resources resources = context.getResources();
//          Bitmap bmp = BitmapFactory.decodeResource(resources, R.drawable.restaurant);
//          this.marker = new BitmapDrawable(resources, bmp);

        }else if(type.equals("bar||club")){
            Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.bars);
            this.marker = new BitmapDrawable(context.getResources(), bmp);
        }else if(type.equals("amusement_park||aquarium||park||zoo")){
            Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.attractions);
            this.marker = new BitmapDrawable(context.getResources(), bmp);
        }else if(type.equals("hotel||motel||bread_and_breakfast")){
            Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.hotels);
            this.marker = new BitmapDrawable(context.getResources(), bmp);
        }else if(type.equals("shopping")){
            Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.shopping);
            this.marker = new BitmapDrawable(context.getResources(), bmp);
        }else if(type.equals("food||meal_takeaway")){
            Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.fastfood);
            this.marker = new BitmapDrawable(context.getResources(), bmp);
        }else{
            this.marker = null;
        }

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

}

1 Ответ

1 голос
/ 16 марта 2012

Я думаю, что это может быть связано с тем, как вы тестируете тип OverlayItem.

Условие type.equals("bar||club") будет истинным, только если строка типа "bar||club". Это означает, что если type является "bar", у него не будет никаких маркеров.

Я бы предложил создать статическую карту:

private static Map<String, Integer> types = new HashMap<String, Integer>();

Инициализируйте его на статическом блоке:

static {
    types.put("bar", R.drawable.bars);
    types.put("club", R.drawable.bars);
    // ... the rest of mappings
}

и затем на конструкторе наложения просто сделайте это:

public PlaceOverlayItem(Context context, Place p, String type) {
    super(p.getGeoPoint(), p.getName(), p.getFormatted_address());
    int resId = types.get(type);
    Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), resId);
    this.marker = new BitmapDrawable(context.getResources(), bmp);
    super.setMarker(this.marker);
    this.point = p.getGeoPoint();
    this.place = p;
}

В качестве альтернативы вы также можете создать файл json в папке raw и проанализировать его, чтобы получить сопоставление, используя: org.json . Таким образом, вы можете изменить значки, не переходя к коду и не используя его повторно в других классах.

Другая альтернатива, если вы чувствуете смелость реализовать ее, - это использовать аннотации для создания карты.

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...