1

我正在开发一个Android应用程序,具有含一个MapView ... 包含根据本地数据库中的位置的标记的MapView片段.. 有什么办法动画,甚至改变只点击标记的颜色? 我的意思是我已经做到了在setOnMarkerClickListener,但是,当我在另一个标记点​​击,上一个标记还是相同的颜色/动画...添加动画拖欠setOnMarkerClickListener Maps API第2机器人标记

添加下面的代码的主要部分...

String myPath = DB_PATH + DB_NAME; 
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 
    Cursor c = myDataBase.rawQuery("Select * from location", null); 
    if (c != null) { 
     if (c.moveToFirst()) { 
      do { 
       id = c.getInt(0); 
       if (userPrefs.getString("locale",null)==null || userPrefs.getString("locale",null).equals("en")) 
       { 
        storename = c.getString(1); 
       } 
       else { 
        storename = c.getString(7); 
       } 
       stlatitude = c.getDouble(2); 
       stlongitude = c.getDouble(3); 
       city = c.getString(4); 
       String emirate = c.getString(5); 
       storeloc = new Location("StoreLocation"); 
       storeloc.setLatitude(stlatitude); 
       storeloc.setLongitude(stlongitude); 
       addmarker(); 
      } 
      while (c.moveToNext()); 
     } 
    } 
    myDataBase.close(); 

    map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
     @Override 
     public boolean onMarkerClick(Marker marker) { 
      String s= marker.getTitle(); 
      String snippet= marker.getSnippet(); 
      markerlat= marker.getPosition().latitude; 
      markerlong= marker.getPosition().longitude; 
      marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); 
      tv.setText(s); 
      tv1.setText(snippet); 
       if (s.equals(getActivity().getResources().getString(R.string.here))) { 
        if (relbutton.getVisibility() == View.VISIBLE && reltext.getVisibility() == View.VISIBLE) { 
         relbutton.setAlpha(1.0f); 
         relbutton.animate().translationY(0).alpha(0.0f); 
         relbutton.setVisibility(View.GONE); 
        } else if (relbutton.getVisibility() != View.VISIBLE && reltext.getVisibility() != View.VISIBLE) { 
         reltext.setVisibility(View.VISIBLE); 
         reltext.setAlpha(0.0f); 
         reltext.animate().translationY(0).alpha(1.0f); 
         if (userPrefs.getString("locale",null).equals("ar")) 
         { 
          RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.relativeLayout2); 
          relativeLayout.setGravity(Gravity.LEFT); 
          RelativeLayout relativeLayout1 = (RelativeLayout) view.findViewById(R.id.relativeLayout1); 
          relativeLayout1.setGravity(Gravity.RIGHT); 
         } 
        } 

       } else if (relbutton.getVisibility() != View.VISIBLE && reltext.getVisibility() != View.VISIBLE) { 
        relbutton.setVisibility(View.VISIBLE); 
        reltext.setVisibility(View.VISIBLE); 
        reltext.setAlpha(0.0f); 
        reltext.animate().translationY(0).alpha(1.0f); 
        relbutton.setAlpha(0.0f); 
        relbutton.animate().translationY(0).alpha(1.0f); 
        if (userPrefs.getString("locale",null).equals("ar")) 
        { 
         RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.relativeLayout2); 
         relativeLayout.setGravity(Gravity.LEFT); 
         RelativeLayout relativeLayout1 = (RelativeLayout) view.findViewById(R.id.relativeLayout1); 
         relativeLayout1.setGravity(Gravity.RIGHT); 
        } 
       } else if (reltext.getVisibility() == View.VISIBLE) { 
        relbutton.setVisibility(View.VISIBLE); 
        relbutton.setAlpha(0.0f); 
        relbutton.animate().translationY(0).alpha(1.0f); 
        if (userPrefs.getString("locale",null).equals("ar")) 
        { 
         RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.relativeLayout2); 
         relativeLayout.setGravity(Gravity.LEFT); 
         RelativeLayout relativeLayout1 = (RelativeLayout) view.findViewById(R.id.relativeLayout1); 
         relativeLayout1.setGravity(Gravity.RIGHT); 
        } 
       } 
      return true; 
     } 

    }); 


    directions.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      nwLocation = appLocationService.getLocation(LocationManager.NETWORK_PROVIDER); 
      if(nwLocation!=null) { 
       userlatitude = nwLocation.getLatitude(); 
       userlongitude = nwLocation.getLongitude(); 
      if(markerlat!=null && markerlong!=null) { 
       String uri = "http://maps.google.com/maps?f=d&hl=en&saddr=" + userlatitude + "," + userlongitude + "&daddr=" + markerlat + "," + markerlong; 
       Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri)); 
       intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"); 
       startActivity(intent); 
      } 
      } 
      else { 
       showSettingsAlert("NETWORK"); 
      } 
     } 
    }); 
    return view; 
} 

private void addmarker() { 
    markerOptions.position(new LatLng(stlatitude, stlongitude)); 
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_VIOLET)); 
    markerOptions.title(getActivity().getResources().getString(R.string.xpressionsstyle)); 
    markerOptions.snippet(storename); 
    map.addMarker(markerOptions); 
} 
+1

有多少标记要绘制地图画面上? –

+1

尽可能多的数据库中的位置... –

+1

所有的制造商应该在不同的颜色? –

回答

0

我已经通过改变如下所述onmarkerclick代码整理出溶液...

public boolean onMarkerClick(Marker marker) { 
      String s= marker.getTitle(); 
      String snippet= marker.getSnippet(); 
      markerlat= marker.getPosition().latitude; 
      markerlong= marker.getPosition().longitude; 
      if(prevmarker!=null){ 
        if(!prevmarker.getTitle().equals(getActivity().getResources().getString(R.string.here))) 
       { 
        prevmarker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_VIOLET)); 
       } 
      } 
      if (!s.equals(getActivity().getResources().getString(R.string.here))) { 
       marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); 
      } 
0

可以创建具有不同颜色的该ArrayList命名等 在oncreateView使用这些线..

并保持整数INT color_value = 0的值; 并在标记点击事件中增加这些值;

int color_value = 0; 
ArrayList<String> colours = new ArrayList<String>(); 
colours.add("HUE_RED"); 
colours.add("HUE_BLACK"); 
colours.add("HUE_BLUE"); 
colours.add("HUE_PINK"); 
colours.add("HUE_GRAY"); 
colours.add("HUE_YELLOW"); 
. 
. 
. 
. 
. 
colours.add("HUE_GREEN"); 

和onMarkerClickListener使用下面的代码行并增加color_value的值;

public boolean onMarkerClick(Marker marker) { 
for(int i =0;i<=colours.size();i++) 
{ 
    if(color_value==i) 
    { 
    if(color_value==colours.size) 
    { 
     colur_value=0; 
    } 
    else 
    { 
     color_value++;//increment the value of color from here 
    } 
      marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.colours.get(i))); 

break; 
    } 
} 
} 
+0

这不是我想解释的东西...我只需要改变所选标记的颜色......如果用户选择另一个标记,上一个标记的颜色应该重置为默认颜色... –

+0

也有可能......每当您单击以标记标记而不是删除以前的制造商并取代它时,您必须将不同的类型标记的颜色 –

0

上的OnCreate第一限定标记这样

makerDefault = this.getResources()。getDrawable (R.drawable.marker_default);

使用该类 私有类MyItemizedOverlay扩展ItemizedOverlay {

 private List<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

     public MyItemizedOverlay(Drawable defaultMarker) { 
      super(boundCenterBottom(defaultMarker)); 
     } 

     public void addOverlayItem(int lat, int lon, String title, Drawable altMarker) { 

      GeoPoint point = new GeoPoint(lat, lon); 
      OverlayItem overlayItem = new OverlayItem(point, title, null); 
      addOverlayItem(overlayItem, altMarker); 
     } 

     public void addOverlayItem(OverlayItem overlayItem) { 
      mOverlays.add(overlayItem); 
      populate(); 
     } 

     public void addOverlayItem(OverlayItem overlayItem, Drawable altMarker) { 
      overlayItem.setMarker(boundCenterBottom(altMarker)); 
      addOverlayItem(overlayItem); 
     } 

     @Override 
     protected OverlayItem createItem(int i) { 
      return mOverlays.get(i); 
     } 

     @Override 
     public int size() 
     { 
      return mOverlays.size(); 
     } 

     @Override 
     protected boolean onTap(int index) { 
      // Toast.makeText(LocationActivity.this, getItem(index).getTitle(), Toast.LENGTH_LONG).show(); 
      Intent intent=new Intent(LocationActivity.this, PlaceOrderActivity.class);    
      intent.putExtra("shop_no", getItem(index).getTitle()); 


      startActivity(intent); 
      return true; 
     } 

    } 

后,结合这样的 MyItemizedOverlay itemizedOverlay =新MyItemizedOverlay(makerDefault)数据后,

     JSONArray array=  new JSONArray(data); 
         String da=String.valueOf(array.length()); 
         Log.d("da", da); 
         for(int i=0;i<array.length();i++){ 
          JSONObject jsonObject = array.getJSONObject(i); 
          Log.d("jsonObject", jsonObject.toString()); 
          shopname=jsonObject.getString("0");                
          latitude=jsonObject.getString("1"); 
          longitude=jsonObject.getString("2"); 
          shop_no=jsonObject.getString("3"); 
          Log.d("shopname", shopname); 

           mc = mapView.getController();        
           double dbl_latitude = Double.parseDouble(latitude); 
           int Lat = (int)(dbl_latitude * 1E6);                
           double dbl_longitude = Double.parseDouble(longitude); 
           int Lon = (int)(dbl_longitude* 1E6); 

           itemizedOverlay.addOverlayItem(Lat, Lon, shop_no, makerDefault); 
           mapView.getOverlays().add(itemizedOverlay); 
           mc.setCenter(new GeoPoint(Lat, Lon)); 
           //Toast.makeText(getApplicationContext(), Lat+""+Lon, 3000).show(); 
           mc.zoomToSpan(itemizedOverlay.getLatSpanE6(), itemizedOverlay.getLonSpanE6()); 
在此

你必须把多个图像与你的愿望颜色