গুগল ম্যাপস এপিআই ভি 2: কীভাবে চিহ্নিতকারীদের ক্লিকযোগ্য?


128

অ্যান্ড্রয়েড গুগল ম্যাপস এপিআই ভি 2-তে চিহ্নিতকারীগুলিকে কীভাবে ক্লিকযোগ্য করে তুলব যাতে তারা হয় বিকল্পগুলির সাথে একটি মেনু আনবে বা কেবল একটি নতুন ক্রিয়াকলাপ শুরু করবে? আমি বিশ্বাস করি যে আমি বর্তমানে আমার অ্যাপ্লিকেশনটিতে একটি "নতুন" পদ্ধতিতে চিহ্নিতকারীকে তৈরি করেছি। প্রয়োজনীয় কোডের বাকী অংশের সাথে এটি লিঙ্ক করতে সক্ষম হতে আমি তাদের কোনও নাম বা কোনও পদ্ধতি নিযুক্ত করি নি।

googleMap.addMarker(new MarkerOptions()
        .position(latLng)
        .title("My Spot")
        .snippet("This is my spot!")
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));

আপনি যদি এটার উত্তর দেন তবে দয়া করে কোনও চিহ্নিতকরণের একটি নমুনা কোডটি অনন্য নামের সাথে চালু করা হবে এবং তারপরে একটি নতুন ক্রিয়াকলাপ খোলার জন্য ক্লিকযোগ্য হিসাবে সেট করা হবে being

উত্তর:


238

গুগল অ্যান্ড্রয়েড মানচিত্র এপিআই ভি 2 এর সমস্ত চিহ্নিতকারী ক্লিকযোগ্য। আপনার চিহ্নিতকারীকে কোনও অতিরিক্ত সম্পত্তি সেট করার দরকার নেই। আপনাকে যা করতে হবে - তা হ'ল আপনার গুগলম্যাপে মার্কার ক্লিক কলব্যাক এবং রেজিস্ট্রেশন ক্লিক কলব্যাকের মধ্যে ক্লিক করুন:

public class MarkerDemoActivity extends android.support.v4.app.FragmentActivity
    implements OnMarkerClickListener
{
    private Marker myMarker;    

    private void setUpMap()
    {
        .......
        googleMap.setOnMarkerClickListener(this);

        myMarker = googleMap.addMarker(new MarkerOptions()
                    .position(latLng)
                    .title("My Spot")
                    .snippet("This is my spot!")
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
        ......
    }

    @Override
    public boolean onMarkerClick(final Marker marker) {

        if (marker.equals(myMarker)) 
        {
            //handle click here
        }
    }
}

এখানে চিহ্নিতকারী কাস্টমাইজেশন সম্পর্কে গুগল একটি ভাল গাইড


9
পপআপ উইন্ডোতে ক্লিকগুলি শুনতে কোনও উপায় আছে? আপনার শিরোনাম / স্নিপেট প্রদর্শন করে?

40
চিহ্নিতকারীদের মতো একই জিনিস - আপনার নিবন্ধন করতে হবে OnInfoWindowClickListenerCallback। এর জন্য googleMap.setOnInfoWindowClickListener(listener);
গুগল্যাপে

এটি এখনকার জন্য খুব সুন্দর কাজ করছে, আমি লক্ষ্য করেছি যে আমার ভুল কোডের আগে ভেরিয়েবল হিসাবে সেট করছে না। আমি কেবল "" "ভুলে গেছি এবং প্রয়োগকৃত কোড
মালেকা

1
@ জেডিঅকটাউন আপনার বিভিন্ন চিহ্নকারীর জন্য আলাদা যুক্তি আছে কিনা আপনার এই চেকটি দরকার। আসুন আপনাকে নির্দিষ্ট টোকা চিহ্নিতকারীকে ক্লিক করা হয় এমন সময় আপনি টোস্টটি প্রদর্শন করতে চান Le আপনার সকল মার্কারদের জন্য যদি একই হ্যান্ডলিং লজিক থাকে - আপনাকে মার্কার চেক করতে হবে না
পাভেল দুডকা

1
ডকুমেন্টেশনে যেমন উল্লেখ করা হয়েছে ( developers.google.com/android/references/com/google/android/gms/… ), ক্লিকটি গ্রাস হয়ে গেলে আপনার সত্যের দিকে ফিরে আসতে হবে। আপনি যদি মিথ্যা ফিরিয়ে দেন - ডিফল্ট আচরণ ঘটবে
পাভেল দুডকা

36

setTag(position) মানচিত্রে চিহ্নিতকারী যুক্ত করার সময়।

Marker marker =  map.addMarker(new MarkerOptions()
                .position(new LatLng(latitude, longitude)));
marker.setTag(position);

getTag()setOnMarkerClickListenerশ্রোতার উপর

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
                @Override
                public boolean onMarkerClick(Marker marker) {
                    int position = (int)(marker.getTag());
                   //Using position get Value from arraylist 
                    return false;
                }
            });

4

OnMarkerClickListener ক্রিয়াকলাপ প্রয়োগগুলি এড়িয়ে চলুন, একটি স্থানীয় OnMarkerClickListener ব্যবহার করুন

// Not a good idea
class MapActivity extends Activity implements OnMarkerClickListener {
}

চিহ্নিতকারীর সাথে সংযুক্ত মূল ডেটা মডেলটি অনুসন্ধান করতে আপনার একটি মানচিত্রের প্রয়োজন হবে

private Map<Marker, Map<String, Object>> markers = new HashMap<>();

আপনার একটি ডেটা মডেল লাগবে

private Map<String, Object> dataModel = new HashMap<>();

ডেটা মডেলটিতে কিছু তথ্য রাখুন

dataModel.put("title", "My Spot");
dataModel.put("snipet", "This is my spot!");
dataModel.put("latitude", 20.0f);
dataModel.put("longitude", 100.0f);

ডেটা মডেল ব্যবহার করে একটি নতুন চিহ্নিতকারী তৈরি করার সময় উভয়টিকে নির্মাতার মানচিত্রে যুক্ত করুন

Marker marker = googleMap.addMarker(markerOptions);
markers.put(marker, dataModel);

ক্লিক চিহ্নিতকারী ইভেন্টের জন্য, একটি স্থানীয় অনমার্কারক্লিকলিস্টনার ব্যবহার করুন:

@Override
public void onMapReady(GoogleMap googleMap) {
    // grab for laters
    this.googleMap = googleMap;

    googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            Map dataModel = (Map)markers.get(marker);
            String title = (String)dataModel.get("title");
            markerOnClick(title);

            return false;
        }
    });

    mapView.onResume();

    showMarkers();

    ZoomAsync zoomAsync = new ZoomAsync();
    zoomAsync.execute();
}

তথ্য উইন্ডো প্রদর্শনের জন্য চিহ্নিতকারী মানচিত্র থেকে মূল ডেটা মডেলটি পুনরুদ্ধার করুন:

@Override
public void onMapReady(GoogleMap googleMap) {
    this.googleMap = googleMap;
    googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
        @Override
        public void onInfoWindowClick(Marker marker) {
            Map dataModel = (Map)markers.get(marker);
            String title = (String)dataModel.get("title");

            infoWindowOnClick(title);
        }
    });

অনমার্কারক্লিকলিস্টনার বাস্তবায়নের ত্রুটিগুলি কী কী?
ডি রোসাদো

@ ডি.রোসাদো অনমার্কারক্লিকলিস্টার হ'ল যখন চিহ্নিতকারীটি ক্লিক করা হয়, তথ্যের উইন্ডোটি ক্লিক করা হলে অনInfoWindowClickListener হয়। আমি কি আপনার প্রশ্নের ভুল বুঝছি? সেটটারের মতো একই কোডের মধ্যে প্রয়োগটি রাখতে প্রতিটি ইনলাইন প্রয়োগ করুন।
গ্যারি ডেভিস

3

আরেকটি সমাধান: আপনি এর শিরোনাম দ্বারা চিহ্নিতকারী পাবেন

public class MarkerDemoActivity extends android.support.v4.app.FragmentActivity implements OnMarkerClickListener
{
      private Marker myMarker;    

      private void setUpMap()
      {
      .......
      googleMap.setOnMarkerClickListener(this);

      myMarker = googleMap.addMarker(new MarkerOptions()
                  .position(latLng)
                  .title("My Spot")
                  .snippet("This is my spot!")
                  .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
      ......
      }

  @Override
  public boolean onMarkerClick(final Marker marker) 
  {

     String name= marker.getTitle();

      if (name.equalsIgnoreCase("My Spot")) 
      {
          //write your code here
      }
  }
}

2

এখানে 4 ক্লিকযোগ্য চিহ্নিতকারী সহ আমার মানচিত্রের ক্রিয়াকলাপের পুরো কোডটি। একটি চিহ্নিতকারী ক্লিক করুন একটি তথ্য উইন্ডো দেখায়, এবং তথ্য উইন্ডো ক্লিক করার পরে আপনি অন্য ক্রিয়াকলাপে যাচ্ছেন: ইংরেজি, জার্মান, স্প্যানিশ বা ইতালিয়ান। আপনি যদি OnInfoWindowClickListener সত্ত্বেও OnMarkerClickListener ব্যবহার করতে চান তবে আপনাকে কেবল এই লাইনটি অদলবদল করতে হবে:

mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener()

এটি:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()

এই লাইন:

public void onInfoWindowClick(Marker arg0)

এটি:

public boolean onMarkerClick(Marker arg0)

এবং পদ্ধতির শেষে "onMarkerClick":

return true;

আমি মনে করি এটি কারও পক্ষে সহায়ক হতে পারে;)

package pl.pollub.translator;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        Toast.makeText(this, "Choose a language.", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener()
        {

            @Override
            public void onInfoWindowClick(Marker arg0) {
                if(arg0 != null && arg0.getTitle().equals("English")){
                Intent intent1 = new Intent(MapsActivity.this, English.class);
                startActivity(intent1);}

                if(arg0 != null && arg0.getTitle().equals("German")){
                Intent intent2 = new Intent(MapsActivity.this, German.class);
                startActivity(intent2);} 

                if(arg0 != null && arg0.getTitle().equals("Italian")){
                Intent intent3 = new Intent(MapsActivity.this, Italian.class);
                startActivity(intent3);}

                if(arg0 != null && arg0.getTitle().equals("Spanish")){
                Intent intent4 = new Intent(MapsActivity.this, Spanish.class);
                startActivity(intent4);}
            }
        });
        LatLng greatBritain = new LatLng(51.30, -0.07);
        LatLng germany = new LatLng(52.3107, 13.2430);
        LatLng italy = new LatLng(41.53, 12.29);
        LatLng spain = new LatLng(40.25, -3.41);
        mMap.addMarker(new MarkerOptions()
                .position(greatBritain)
                .title("English")
                .snippet("Click on me:)"));
        mMap.addMarker(new MarkerOptions()
                .position(germany)
                .title("German")
                .snippet("Click on me:)"));
        mMap.addMarker(new MarkerOptions()
                .position(italy)
                .title("Italian")
                .snippet("Click on me:)"));
        mMap.addMarker(new MarkerOptions()
                .position(spain)
                .title("Spanish")
                .snippet("Click on me:)"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(greatBritain));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(germany));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(italy));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(spain));
    }
}

1
শ্রোতা যদি ইভেন্টটি গ্রাস করে থাকে তবে সত্য প্রত্যাবর্তন করুন (যেমন, পূর্বনির্ধারিত আচরণটি হওয়া উচিত নয়); মিথ্যা অন্যথায় (যেমন, ডিফল্ট আচরণ হওয়া উচিত)। ডিফল্ট আচরণটি ক্যামেরার চিহ্নিতকারী এবং একটি তথ্য উইন্ডোতে উপস্থিত হওয়ার জন্য move
অ্যারিক

1
Step 1
public class TopAttractions extends Fragment implements OnMapReadyCallback, 
GoogleMap.OnMarkerClickListener

Step 2
gMap.setOnMarkerClickListener(this);

Step 3
@Override
public boolean onMarkerClick(Marker marker) {
    if(marker.getTitle().equals("sharm el-shek"))
        Toast.makeText(getActivity().getApplicationContext(), "Hamdy", Toast.LENGTH_SHORT).show();
    return false;
}

0

আমি যোগ mMap.setOnMarkerClickListener(this);মধ্যে onMapReady(GoogleMap googleMap)পদ্ধতি। সুতরাং প্রতিবার আপনি যখন কোনও মার্কার ক্লিক করেন এটি টোস্ট পদ্ধতিতে পাঠ্যের নামটি প্রদর্শন করে।

public class DemoMapActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener,OnMapReadyCallback, GoogleMap.OnMarkerClickListener {

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_places);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    double lat=0.34924212701428;
    double lng=32.616554024713;
    String venue = "Capital Shoppers City";
    LatLng location = new LatLng(lat, lng);
    mMap.addMarker(new MarkerOptions().position(location).title(venue)).setTag(0);
    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLng(location);
    CameraUpdate zoom = CameraUpdateFactory.zoomTo(16);
    mMap.moveCamera(cameraUpdate);
    mMap.animateCamera(zoom);
    mMap.setOnMarkerClickListener(this);
}

@Override
public boolean onMarkerClick(final Marker marker) {
    // Retrieve the data from the marker.
    Integer clickCount = (Integer) marker.getTag();

    // Check if a click count was set, then display the click count.
    if (clickCount != null) {
        clickCount = clickCount + 1;
        marker.setTag(clickCount);
        Toast.makeText(this,
                       marker.getTitle() +
                       " has been clicked ",
                       Toast.LENGTH_SHORT).show();
    }
    // Return false to indicate that we have not consumed the event and that we wish
    // for the default behavior to occur (which is for the camera to move such that the
    // marker is centered and for the marker's info window to open, if it has one).
    return false;
}

}

আপনি রেফারেন্স চিহ্নিতকারীদের জন্য এই লিঙ্কটি চেক করতে পারেন


-4

আমি উপরোক্ত উদাহরণটি সম্পাদনা করেছি ...

public class YourActivity extends implements OnMarkerClickListener
{
    ......

    private void setMarker()
    {
        .......
        googleMap.setOnMarkerClickListener(this);

        myMarker = googleMap.addMarker(new MarkerOptions()
                    .position(latLng)
                    .title("My Spot")
                    .snippet("This is my spot!")
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
        ......
    }

    @Override
    public boolean onMarkerClick(Marker marker) {

       Toast.makeText(this,marker.getTitle(),Toast.LENGTH_LONG).show();
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.