android g maps标记如何在共享首选项中存储图标

时间:2014-04-02 16:46:30

标签: android sharedpreferences google-maps-markers

您好我已经创建了一些代码,我在共享首选项上保存用户点击事件。因此,基本上在地图上点击标记会被添加,当我重新运行应用程序时,标记会再次显示在共享首选项中。问题是,对于标记我设置了一个不同的图标,当我点击在地图上添加标记时图标很好,但是当我重新加载地图时,图标会变为默认的谷歌地图图标。关于这个问题的任何建议??

SHARED PREFERENCES.


SharedPreferences prefs = null;//Place it before onCreate you can access its values any where in    
this class

// onCreate method started 

  prefs = this.getSharedPreferences("LatLng",MODE_PRIVATE); 
 //Check whether your preferences contains any values then we get those values
 if((prefs.contains("Lat")) && (prefs.contains("Lng"))
  {   
  String lat = prefs.getString("Lat","");
  String lng = prefs.getString("Lng","");    
  LatLng l =new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));
  gMap.addMarker(new MarkerOptions().position(l));

 }

  Inside your onMapClick

 gMap.setOnMapClickListener(new GoogleMap.OnMapClickListener(){   
 @Override
  public void onMapClick(LatLng point) {
 marker = gMap.addMarker(new MarkerOptions().position(point));

/* This code will save your location coordinates in SharedPrefrence when you click on the map and       
  later you use it  */
 prefs.edit().putString("Lat",String.valueOf(point.latitude)).commit();
 prefs.edit().putString("Lng",String.valueOf(point.longitude)).commit();

 }

}); 

THE ONCLICK EVENT。

     gMap.setOnMapClickListener(new GoogleMap.OnMapClickListener(){

        @Override
        public void onMapClick(LatLng point) {
            gMap.addMarker(new MarkerOptions()
            .position(point).
            title("BEACH").
            snippet("added by user.")
             .icon(BitmapDescriptorFactory.fromResource(R.drawable.b)));

    prefss.edit().putString("Lat",String.valueOf(point.latitude)).commit();

    prefss.edit().putString("Lng",String.valueOf(point.longitude)).commit();
        }

    });

2 个答案:

答案 0 :(得分:1)

您可以在SharedPreferences.中为每个制作者存储图像的resourceId然后您可以使用icon()方法并传入BitmapDescriptorFactory.fromResource(resourceId)来获取该ID并设置图标。换句话说,

如果要保存resourceId,请使用

prefs.edit().putInt(KEY_FOR_MARKER_ICON, iconResourceId);    

然后在您想稍后显示时抓取ID。

prefs.getInt(KEY_FOR_MARKER_ICON, 0);
markerOptions.icon(BitmapDescriptorFactory.fromResource(resourceId));

我认为,如果您查看onCreate()代码并更改

,您的代码就会生效
marker = gMap.addMarker(new MarkerOptions().position(point));

marker = gMap.addMarker(new MarkerOptions().position(point)
                                           .icon(BitmapDescriptorFactory.fromResource(R.drawable.b)));

答案 1 :(得分:0)

如果您有多种类型的标记(例如: - 医院,学校,寺庙等...),您应该将它们保存在可绘制文件夹中,然后将标记类型与纬度和经度值一起存储在数据库表中...加载时间从表中选择所有值并检查标记的类型,并将drawable与纬度和经度值放在一起