2016-05-11 9 views
1

私のアプリケーションでGoogleマップをOSMマップに置き換えようとしています。私はthisを使って、Jitpackを使ってプロジェクトをインストールしてインポートする方法に従っています。 正常に動作します。マーカーのデフォルトの情報の泡(いくつかの薄い灰色のもの)がタップされて表示されます。私は、マーカーのバブルの背景を変更したい場合は?私は、任意の提案が高く評価されますOSMDROID/OSMBonusPackを使用してマーカーバブルを変更するには

import android.app.Fragment; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import org.osmdroid.api.IMapController; 
import org.osmdroid.tileprovider.tilesource.TileSourceFactory; 
import org.osmdroid.util.GeoPoint; 
import org.osmdroid.views.MapView; 
import org.osmdroid.views.overlay.Marker; 
import org.osmdroid.views.overlay.ScaleBarOverlay; 
import java.util.ArrayList; 
import java.util.List; 
import demo.exe.exe.R; 
import demo.exe.exe.model.Education.EducationServiceProviderItem; 
import demo.exe.exe.utils.AppConstants; 


public class MapFragmentOSM extends Fragment implements View.OnClickListener { 

    private ArrayList<EducationServiceProviderItem> educationServiceProvider=null; 
MapView mapView; 
    int subcategotyId; 
    View rootView; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     double latDouble,longDouble; 
     int i=0; 
     super.onCreate(savedInstanceState); 
     rootView = inflater.inflate(R.layout.fragment_map, container, 
       false); 

     mapView = (MapView) rootView.findViewById(R.id.mapview); 
     mapView.setClickable(true); 
     mapView.setBuiltInZoomControls(true); 
     mapView.setMultiTouchControls(true); 
     mapView.setUseDataConnection(true); 

; 
     mapView.setTileSource(TileSourceFactory.MAPQUESTOSM); 

     IMapController mapViewController = mapView.getController(); 



     if(locationNameId==1) { 

      mapViewController.setZoom(18); 
      mapViewController.setCenter(AppConstants.BAUNIA1); 
     } 
     else if(locationNameId==2) 
     { 
      mapViewController.setZoom(17); 
      mapViewController.setCenter(AppConstants.PARIS1); 
     } 
     switch (categoryId) 
     { 
      case AppConstants.EDUCATION: 
       if(educationServiceProvider!=null) { 
        for (EducationServiceProviderItem et : educationServiceProvider) { 
        // LatLng location = new LatLng(Double.parseDouble(et.getLatitude()), Double.parseDouble(et.getLongitude())); 
         subcategotyId = et.getEduSubCategoryId(); 
         latDouble=Double.parseDouble(et.getLatitude()); 
         longDouble=Double.parseDouble(et.getLongitude()); 
         GeoPoint point= new GeoPoint(latDouble,longDouble); 
         drawMarkerEdu(point, et.getEduNameEng(),et.getAddress(), et.getEduSubCategoryId()); 
        } 
       } 
       break; 


      default: 
       break; 

     } 

     //Add Scale Bar 
     ScaleBarOverlay myScaleBarOverlay = new ScaleBarOverlay(mapView); 
     mapView.getOverlays().add(myScaleBarOverlay); 


     return rootView; 
    } 
    private void drawMarkerEdu(GeoPoint point,String title,String address,int subcategotyId) { 
     Marker marker = new Marker(mapView); 
     marker.setPosition(point); 
     marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); 


     if (subcategotyId >= 1 && subcategotyId <= 12) 
      marker.setIcon(this.getResources().getDrawable(R.drawable.pin_feroza)); 
     else if (subcategotyId >= 13 && subcategotyId <= 17) 
      marker.setIcon(this.getResources().getDrawable(R.drawable.pin_blue)); 
     else if (subcategotyId >= 18 && subcategotyId <= 19) 
      marker.setIcon(this.getResources().getDrawable(R.drawable.pin_pink)); 
     else if (subcategotyId >= 20 && subcategotyId <= 21) 
      marker.setIcon(this.getResources().getDrawable(R.drawable.pin_green)); 
     else if (subcategotyId >= 22 && subcategotyId <= 26) 
      marker.setIcon(this.getResources().getDrawable(R.drawable.pin_yellow)); 
     marker.setSnippet(title); 
     marker.setSubDescription(address); 
     mapView.getOverlays().add(marker); 


    } 
    @Override 
    public void onClick(View v) { 

    } 
} 

私のコードでのonClickメソッドのいずれかの種類を使用していない何をすべき!

答えて

2

This tutorialは、あなたが望むものを正確に示します。基本的に、InfoWindowクラスをオーバーライドして独自のレイアウトを与えます。

+0

ありがとう!私はカスタム背景を使用することができました。しかし、以前はこのマーカーはマップ上でタップして削除されていました。今は動作しません。何か提案できますか? @Override public boolean singleTapConfirmedHelper(GeoPoint p){ Toast.makeText(getActivity()、 "+ p.getLatitude()+"、 "+ p.getLongitude()+") "をタップします。、Toast.LENGTH_SHORT ).show(); MyInfoWindow.closeAllInfoWindowsOn(mapView); がtrueを返します。 } これは決して呼び出されません。 – user232803

+0

あなたのマップのアクティビティやフラグメントがMapEventsReceiverを実装していますか? – Ruben2112

+2

マップがMapEventsOverlayでロードされているときに実際にイベントオーバーレイを設定していることを確認してください。mapEventsOverlay = new MapEventsOverlay(getActivity()、this); osmv.getOverlays()。add(0、mapEventsOverlay); – Ruben2112

関連する問題