2012-03-15 48 views
0

我拥有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

我认为这可能是您测试OverlayItem类型的方式的问题。

条件type.equals("bar||club")只有在类型字符串为"bar||club"时才为真。这意味着如果类型是“酒吧”,它不会有任何标记。

我有什么建议是建立一个静态的地图:

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文件并解析它以获得th e映射使用:org.json。这样,您可以更改图标而无需转到代码并可以在其他类中重复使用它。

另一种方法是,如果你觉得实施它很勇敢,那就是使用注释来创建地图。

祝你好运

相关问题