2013-05-03 7 views
26

मेरे पास एंड्रॉइड के लिए एकीकृत Google एमएपी एपीआई वी 2 है। मैं माई मार्कर के ऑनक्लिक पर कस्टम इन्फो विंडो रखना चाहता हूं। उस पर यह ठीक है। मैंने इसे एकीकृत किया है।एंड्रॉइड Google मैप एपीआई वी 2: मार्कर के दाहिने तरफ ओपन कस्टम इन्फो विंडो

मुझे क्या चाहिए: मैं मार्कर के शीर्ष के बजाय मार्कर के दाहिने तरफ अपनी कस्टम जानकारी विंडो दिखाना चाहता हूं।

public class MainActivity extends FragmentActivity { 

    private MainMapFragement mapFragment; 
    private HashMap<Marker, EventInfo> eventMarkerMap; 


    Marker ThirdMarker; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mapFragment = new MainMapFragement(); 
     // FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.add(R.id.map, mapFragment); 
     ft.commit(); 

    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     setUpEventSpots(); 
    } 

    private void setUpEventSpots() { 
     // I'm going to make 2 EventInfo objects and place them on the map 
     EventInfo firstEventInfo = new EventInfo(new LatLng(50.154, 4.35), 
       "Right now - event", new Date(), "Party"); 
     EventInfo secondEventInfo = new EventInfo(new LatLng(51.25, 4.15), 
       "Future Event", new Date(1032, 5, 25), "Convention"); 

     EventInfo thirdEventInfo = new EventInfo(new LatLng(23.25, 72.15), 
       "Our Next Event", new Date(), "Ahmedabad-India"); 
     // this date constructor is deprecated but it's just to make a simple 
     // example 

     Marker firstMarker = mapFragment.placeMarker(firstEventInfo); 
     Marker secondMarker = mapFragment.placeMarker(secondEventInfo); 
     ThirdMarker = mapFragment.placeMarker(thirdEventInfo); 
     eventMarkerMap = new HashMap<Marker, EventInfo>(); 
     eventMarkerMap.put(firstMarker, firstEventInfo); 
     eventMarkerMap.put(secondMarker, secondEventInfo); 
     eventMarkerMap.put(ThirdMarker, thirdEventInfo); 

     // add the onClickInfoWindowListener 
     mapFragment.getMap().setOnInfoWindowClickListener(
       new OnInfoWindowClickListener() { 

        @Override 
        public void onInfoWindowClick(Marker marker) { 
         EventInfo eventInfo = eventMarkerMap.get(marker); 
         Toast.makeText(
           getBaseContext(), 
           "The date of " 
             + eventInfo.getName() 
             + " is " 
             + eventInfo.getSomeDate() 
               .toLocaleString(), 
           Toast.LENGTH_LONG).show(); 

        } 
       }); 



     // Custom Bhavesh 
     mapFragment.getMap().setInfoWindowAdapter(new InfoWindowAdapter() { 

      private final View window = getLayoutInflater().inflate(
        R.layout.ballonoverlly, null); 

      @Override 
      public View getInfoWindow(Marker marker) { 
       EventInfo eventInfo = eventMarkerMap.get(marker); 

       String title = marker.getTitle(); 
       TextView txtTitle = ((TextView) window 
         .findViewById(R.id.textview_name)); 
       if (title != null) { 
        // Spannable string allows us to edit the formatting of the 
        // text. 
        SpannableString titleText = new SpannableString(title); 
        titleText.setSpan(new ForegroundColorSpan(Color.RED), 0, 
          titleText.length(), 0); 
        txtTitle.setText(titleText); 
       } else { 
        txtTitle.setText(""); 
       } 

       // TextView txtType = ((TextView) window 
       // .findViewById(R.id.textview_aboutme)); 
       // if (eventInfo.getType() != null) 
       // txtType.setText(eventInfo.getType()); 

       return window; 
      } 

      @Override 
      public View getInfoContents(Marker marker) { 
       // this method is not called if getInfoWindow(Marker) does not 
       // return null 
       return null; 
      } 
     }); 
    } 

} 

xml फ़ाइल:, अब enter image description here

मैं चाहता हूँ:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RlMain" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 


    <LinearLayout 
     android:id="@+id/imageview_comment" 
     android:layout_width="150dp" 
     android:layout_height="62dp" 
     android:background="@drawable/map_comment_back" 
     android:gravity="center_vertical" 
     android:orientation="vertical" 
     android:scaleType="fitXY" 
     android:visibility="visible" > 

     <TextView 
      android:id="@+id/textview_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="10dp" 
      android:text="Bhavesh Patadiya" 
      android:textColor="#FFFFFF" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/textview_aboutme" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="10dp" 
      android:maxLines="2" 
      android:text="How&apos;s Going?" 
      android:textColor="#FFFFFF" 
      android:textStyle="normal" /> 
    </LinearLayout> 
</LinearLayout> 

नीचे मैं क्या मिल रहा है की स्क्रीन शॉट है

नीचे कोड मैं का उपयोग कर रहा है मेरे कस्टम इन्फोविंडो को शीर्ष के बजाय मार्कर के दाहिने तरफ रखना है।

सभी सहायता की सराहना की जाती है।

अग्रिम में धन्यवाद।

+0

इसके साथ प्रयास करें: आधा बाएं तरफ खाली और आधे दाएं किनारे के साथ एक छवि (पृष्ठभूमि) बनाना -> फिर अपने दाएं हिस्से में सामग्री (टेक्स्ट व्यू) जोड़ें। मुझे उम्मीद है कि यह मार्कर का अधिकार लेगा क्योंकि बाएं तरफ खाली दिखता है – Maddy

उत्तर

0

आप नीचे दिए गए कोड की तरह screenPosition करने के लिए सरल परिवर्तित marker.getPosition (द्वारा कर सकते हैं)

Projection projection = map.getProjection(); 
LatLng markerLocation = marker.getPosition(); 
Point screenPosition = projection.toScreenLocation(markerLocation); 

int x = screenPosition.x +marker. markerImage.getWidth(); 

आप अधिक जानकारी के लिए (जो प्रक्षेपण के लिए getPosition परिवर्तित) के लिए लिंक नीचे रेफरी कर सकते हैं:

How to get screen coordinates from marker in google maps v2 android

+0

@ भावेशपतििया, क्या आप इसके साथ कर रहे हैं? मैं जानकारी विंडो को स्क्रीन के शीर्ष पर रखने की कोशिश करना चाहता हूं। – andrefadila

+0

मैप पर एक दृश्य कैसे लगा सकता हूं? जब मैं कोड 'inflater.inflate (R.id.overlay_layout, (viewGroup) myViewGroup का उपयोग कर मानचित्र पर एक टुकड़ा डालता हूं)' यह मार्कर पर दृश्य दिखाता है, लेकिन मेरे पास यह एक मुद्दा है कि जब लेआउट पक्षों के साथ होता है स्क्रीन दृश्य को लपेटा जाता है यानी यदि टेक्स्टव्यू में टेक्स्ट टेक्स्टव्यू 1 है तो कुछ टेक्स्ट एक पंक्ति में हैं और कुछ टेक्स्ट दूसरी पंक्ति में हैं। क्या कोई इसे हल करने में मेरी मदद कर सकता है – JAPS

6

संपादित करें 2:

सितंबर अपडेट (v12 या 3.2.65) से शुरू Google मानचित्र एंड्रॉइड एपीआई v2 MarkerOptions.infoWindowAnchor जोड़ा गया था। बहुत सारे नए फ़ंक्शन हैं, इसलिए release notes भी देखें।

संपादित करें 3:

Unfortunatelly इस के अलावा अभी तक आपकी समस्या का समाधान नहीं है। इसके लिए new issue जोड़ा गया।


यह वर्तमान में संभव नहीं है।

MapFragment पर डालकर इसे काम करने की कोशिश कर रहे हैं यदि उपयोगकर्ताओं को मानचित्र को स्थानांतरित करने की अनुमति नहीं है तो एक अच्छा समाधान हो सकता है। यदि वे कर सकते हैं, तो आप "पुश टेक्नोलॉजी" onCameraChange या Handler और map.getCameraPosition() के साथ मतदान करते समय पुनर्स्थापन पर कुछ खराब झटके देखेंगे।

यदि आप दृश्यमान क्लिक करते समय जानकारी विंडो दिखाने के लिए पारदर्शी आइकन के साथ अतिरिक्त मार्कर का उपयोग करने का प्रयास करते हैं, तो यह वास्तव में लागू होने पर यह और अधिक मजेदार होगा।

यदि आप अभी के लिए दाईं ओर जानकारी विंडो के बिना रह सकते हैं, तो मैं this feature already requested अभिनीत करने और प्रतीक्षा करने का सुझाव दूंगा।

संपादित करें:

3.1.36 (राजस्व के रूप में।7) एपीआई v2 के आप मार्कर के आइकन को बदल सकते हैं। इसका मतलब है कि आप दो आइकन बना सकते हैं: एक सामान्य, और दूसरा ऐसा लगता है कि आपके पास दाईं ओर एक जानकारी विंडो खुलती है। डिफ़ॉल्ट जानकारी विंडो खोलने और इसके बजाय इसका उपयोग करने से आपके लिए काम हो सकता है।

संबंधित मुद्दे