
মার্কারগুলো মানচিত্রে বিভিন্ন স্থান চিহ্নিত করে। ডিফল্ট মার্কার হিসেবে একটি সাধারণ আইকন ব্যবহৃত হয়, যা গুগল ম্যাপসের ডিজাইন ও অনুভূতির সাথে পরিচিত। এপিআই (API) ব্যবহার করে আইকনের রঙ, ছবি বা অ্যাঙ্কর পয়েন্ট পরিবর্তন করা সম্ভব। মার্কারগুলো Marker টাইপের অবজেক্ট এবং GoogleMap.addMarker(markerOptions) মেথডের মাধ্যমে এগুলো মানচিত্রে যুক্ত করা হয়।
মার্কারগুলো ইন্টারেক্টিভ হওয়ার জন্য ডিজাইন করা হয়েছে। এগুলো ডিফল্টভাবে click ইভেন্ট গ্রহণ করে এবং প্রায়শই ইনফো উইন্ডো দেখানোর জন্য ইভেন্ট লিসেনারের সাথে ব্যবহৃত হয়। একটি মার্কারের draggable প্রপার্টি ' true সেট করলে ব্যবহারকারী মার্কারটির অবস্থান পরিবর্তন করতে পারেন। মার্কারটি সরানোর ক্ষমতা সক্রিয় করতে লং প্রেস ব্যবহার করুন।
ডিফল্টরূপে, যখন কোনো ব্যবহারকারী একটি মার্কার ট্যাপ করেন, তখন ম্যাপের নিচের ডানদিকে ম্যাপ টুলবারটি প্রদর্শিত হয়, যা ব্যবহারকারীকে গুগল ম্যাপস মোবাইল অ্যাপে দ্রুত অ্যাক্সেস দেয়। আপনি টুলবারটি নিষ্ক্রিয় করতে পারেন। আরও তথ্যের জন্য, কন্ট্রোল গাইডটি দেখুন।
একটি মার্কার যোগ করুন
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি মানচিত্রে মার্কার যুক্ত করতে হয়। মার্কারটি -33.852,151.211 (সিডনি, অস্ট্রেলিয়া) স্থানাঙ্কে তৈরি করা হয়েছে এবং ক্লিক করা হলে একটি তথ্য উইন্ডোতে 'Marker in Sydney' লেখাটি প্রদর্শন করে।
কোটলিন
override fun onMapReady(googleMap: GoogleMap) { // Add a marker in Sydney, Australia, // and move the map's camera to the same location. val sydney = LatLng(-33.852, 151.211) googleMap.addMarker( MarkerOptions() .position(sydney) .title("Marker in Sydney") ) googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)) }
জাভা
@Override public void onMapReady(GoogleMap googleMap) { // Add a marker in Sydney, Australia, // and move the map's camera to the same location. LatLng sydney = new LatLng(-33.852, 151.211); googleMap.addMarker(new MarkerOptions() .position(sydney) .title("Marker in Sydney")); googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); }
একটি মার্কার সম্পর্কে অতিরিক্ত তথ্য প্রদর্শন করুন
একটি সাধারণ প্রয়োজন হলো, ব্যবহারকারী যখন মানচিত্রে কোনো মার্কার ট্যাপ করেন, তখন সেই স্থান বা অবস্থান সম্পর্কে অতিরিক্ত তথ্য দেখানো। তথ্য উইন্ডো সম্পর্কিত নির্দেশিকাটি দেখুন।
ডেটাকে একটি মার্কারের সাথে সংযুক্ত করুন
আপনি Marker.setTag() ব্যবহার করে একটি মার্কারের সাথে যেকোনো ডেটা অবজেক্ট সংরক্ষণ করতে পারেন এবং Marker.getTag() ব্যবহার করে সেই ডেটা অবজেক্টটি পুনরুদ্ধার করতে পারেন। নিচের নমুনাটিতে দেখানো হয়েছে, কীভাবে ট্যাগ ব্যবহার করে একটি মার্কার কতবার ক্লিক করা হয়েছে তা গণনা করা যায়:
কোটলিন
/** * A demo class that stores and retrieves data objects with each marker. */ class MarkerDemoActivity : AppCompatActivity(), OnMarkerClickListener, OnMapReadyCallback { private val PERTH = LatLng(-31.952854, 115.857342) private val SYDNEY = LatLng(-33.87365, 151.20689) private val BRISBANE = LatLng(-27.47093, 153.0235) private var markerPerth: Marker? = null private var markerSydney: Marker? = null private var markerBrisbane: Marker? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_markers) val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment? mapFragment!!.getMapAsync(this) } /** Called when the map is ready. */ override fun onMapReady(map: GoogleMap) { // Add some markers to the map, and add a data object to each marker. markerPerth = map.addMarker( MarkerOptions() .position(PERTH) .title("Perth") ) markerPerth?.tag = 0 markerSydney = map.addMarker( MarkerOptions() .position(SYDNEY) .title("Sydney") ) markerSydney?.tag = 0 markerBrisbane = map.addMarker( MarkerOptions() .position(BRISBANE) .title("Brisbane") ) markerBrisbane?.tag = 0 // Set a listener for marker click. map.setOnMarkerClickListener(this) } /** Called when the user clicks a marker. */ override fun onMarkerClick(marker: Marker): Boolean { // Retrieve the data from the marker. val clickCount = marker.tag as? Int // Check if a click count was set, then display the click count. clickCount?.let { val newClickCount = it + 1 marker.tag = newClickCount Toast.makeText( this, "${marker.title} has been clicked $newClickCount times.", 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 } }
জাভা
/** * A demo class that stores and retrieves data objects with each marker. */ public class MarkerDemoActivity extends AppCompatActivity implements GoogleMap.OnMarkerClickListener, OnMapReadyCallback { private final LatLng PERTH = new LatLng(-31.952854, 115.857342); private final LatLng SYDNEY = new LatLng(-33.87365, 151.20689); private final LatLng BRISBANE = new LatLng(-27.47093, 153.0235); private Marker markerPerth; private Marker markerSydney; private Marker markerBrisbane; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_markers); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); } /** Called when the map is ready. */ @Override public void onMapReady(GoogleMap map) { // Add some markers to the map, and add a data object to each marker. markerPerth = map.addMarker(new MarkerOptions() .position(PERTH) .title("Perth")); markerPerth.setTag(0); markerSydney = map.addMarker(new MarkerOptions() .position(SYDNEY) .title("Sydney")); markerSydney.setTag(0); markerBrisbane = map.addMarker(new MarkerOptions() .position(BRISBANE) .title("Brisbane")); markerBrisbane.setTag(0); // Set a listener for marker click. map.setOnMarkerClickListener(this); } /** Called when the user clicks a marker. */ @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 " + clickCount + " times.", 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; } }
এমন কিছু পরিস্থিতির উদাহরণ নিচে দেওয়া হলো, যখন মার্কার ব্যবহার করে ডেটা সংরক্ষণ ও পুনরুদ্ধার করা উপযোগী হতে পারে:
- আপনার অ্যাপে বিভিন্ন ধরনের মার্কারের ব্যবস্থা থাকতে পারে, এবং ব্যবহারকারী সেগুলিতে ক্লিক করলে আপনি সেগুলিকে ভিন্নভাবে বিবেচনা করতে চান। এটি করার জন্য, আপনি মার্কারটির ধরন নির্দেশ করে একটি
Stringসংরক্ষণ করতে পারেন। - আপনি এমন কোনো সিস্টেম ব্যবহার করতে পারেন যেখানে অনন্য রেকর্ড শনাক্তকারী রয়েছে, এবং এই শনাক্তকারীগুলো সেই সিস্টেমের নির্দিষ্ট রেকর্ডগুলোকে নির্দেশ করে।
- কোনো মার্কারের z-সূচক নির্ধারণ করার সময়, মার্কার ডেটা ব্যবহারের জন্য একটি অগ্রাধিকার নির্দেশ করতে পারে।
মার্কারটিকে ড্র্যাগযোগ্য করুন
ম্যাপে একবার কোনো মার্কার যুক্ত করার পর, সেটির draggable প্রপার্টি ' true সেট করা থাকলে আপনি সেটির অবস্থান পরিবর্তন করতে পারবেন। ড্র্যাগিং চালু করতে মার্কারটির উপর দীর্ঘক্ষণ চাপ দিন। আপনি স্ক্রিন থেকে আঙুল সরিয়ে নিলেও, মার্কারটি সেই অবস্থানেই থাকবে।
মার্কারগুলো ডিফল্টভাবে ড্র্যাগ করা যায় না। ম্যাপে যোগ করার আগে আপনাকে অবশ্যই MarkerOptions.draggable(boolean) ব্যবহার করে, অথবা ম্যাপে যোগ করার পরে Marker.setDraggable(boolean) ব্যবহার করে মার্কারটিকে ড্র্যাগযোগ্য হিসেবে স্পষ্টভাবে সেট করতে হবে। আপনি মার্কারের ড্র্যাগ ইভেন্টগুলো শুনতে পারেন, যেমনটি "মার্কার ড্র্যাগ ইভেন্ট" অংশে বর্ণনা করা হয়েছে।
নিচের কোড স্নিপেটটি অস্ট্রেলিয়ার পার্থে একটি ড্র্যাগযোগ্য মার্কার যোগ করে।
কোটলিন
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .draggable(true) )
জাভা
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .draggable(true));
একটি মার্কার কাস্টমাইজ করুন
এই ভিডিওতে মানচিত্রে অবস্থানগুলো দৃশ্যমান করতে মার্কার ব্যবহারের বিভিন্ন উপায় দেখানো হয়েছে।
মার্কারগুলো ডিফল্ট আইকনের পরিবর্তে দেখানোর জন্য একটি নিজস্ব ছবি নির্ধারণ করতে পারে। একটি আইকন নির্ধারণ করার জন্য বেশ কিছু বৈশিষ্ট্য সেট করতে হয়, যা মার্কারটির দৃশ্যমান আচরণকে প্রভাবিত করে।
নিম্নলিখিত প্রোপার্টিগুলোর মাধ্যমে মার্কারগুলো কাস্টমাইজেশন করা যায়:
- পদ (আবশ্যক)
- মানচিত্রে মার্কারের অবস্থানের জন্য
LatLngমান। একটিMarkerঅবজেক্টের জন্য এটিই একমাত্র আবশ্যক প্রপার্টি। - নোঙ্গর
- ছবির সেই বিন্দুটি, যা মার্কারের অক্ষাংশ ও দ্রাঘিমাংশ (LatLng) অবস্থানে স্থাপন করা হবে। ডিফল্টরূপে এটি ছবির নিচের অংশের মাঝখানে থাকে।
- আলফা
- মার্কারের অস্বচ্ছতা নির্ধারণ করে। এর ডিফল্ট মান হলো ১.০।
- শিরোনাম
- একটি স্ট্রিং যা ব্যবহারকারী মার্কারটিতে ট্যাপ করলে তথ্য উইন্ডোতে প্রদর্শিত হয়।
- স্নিপেট
- শিরোনামের নিচে প্রদর্শিত অতিরিক্ত লেখা।
- আইকন
- একটি বিটম্যাপ যা ডিফল্ট মার্কার ইমেজের পরিবর্তে প্রদর্শিত হয়।
- ড্র্যাগযোগ্য
- ব্যবহারকারীকে মার্কারটি সরানোর অনুমতি দিতে চাইলে এটি '
trueসেট করুন। ডিফল্ট মান 'false। - দৃশ্যমান
- মার্কারটিকে অদৃশ্য করতে
falseসেট করুন। ডিফল্ট মানtrue। - ফ্ল্যাট বা বিলবোর্ড ওরিয়েন্টেশন
- ডিফল্টরূপে, মার্কারগুলো বিলবোর্ড ওরিয়েন্টেশন ব্যবহার করে, যার অর্থ হলো এগুলো ম্যাপের পৃষ্ঠের পরিবর্তে ডিভাইসের স্ক্রিনের দিকে মুখ করে আঁকা হয়। ম্যাপ ঘোরানো, কাত করা বা জুম করলেও মার্কারের ওরিয়েন্টেশন পরিবর্তন হয় না। আপনি একটি মার্কারের ওরিয়েন্টেশন পৃথিবীর সাথে সমতলভাবে সেট করতে পারেন। ম্যাপ ঘোরানো হলে সমতল মার্কারগুলোও ঘোরে এবং ম্যাপ কাত করলে তাদের দৃষ্টিকোণ পরিবর্তিত হয়। বিলবোর্ড মার্কারের মতোই, ম্যাপ জুম ইন বা আউট করা হলেও সমতল মার্কারগুলো তাদের আকার ধরে রাখে।
- ঘূর্ণন
- মার্কারের অভিমুখ, যা ঘড়ির কাঁটার দিকে ডিগ্রিতে নির্দিষ্ট করা হয়। মার্কারটি সমতল হলে এর ডিফল্ট অবস্থান পরিবর্তিত হয়। একটি সমতল মার্কারের ডিফল্ট অবস্থান উত্তরমুখী হয়। যখন মার্কারটি সমতল থাকে না, তখন এর ডিফল্ট অবস্থান উপরের দিকে নির্দেশ করে এবং ঘূর্ণন এমন হয় যে মার্কারটি সর্বদা ক্যামেরার দিকে মুখ করে থাকে।
নিচের কোড স্নিপেটটি ডিফল্ট আইকন সহ একটি সাধারণ মার্কার তৈরি করে।
কোটলিন
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) )
জাভা
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation));
মার্কারের রঙ কাস্টমাইজ করুন
icon() মেথডে একটি BitmapDescriptor অবজেক্ট পাস করার মাধ্যমে ডিফল্ট মার্কার ইমেজের রঙ কাস্টমাইজ করা সম্ভব। আপনি BitmapDescriptorFactory অবজেক্টে থাকা পূর্বনির্ধারিত রঙের সেট ব্যবহার করতে পারেন, অথবা BitmapDescriptorFactory.defaultMarker(float hue) মেথডের মাধ্যমে একটি কাস্টম মার্কার রঙ সেট করতে পারেন। hue হলো ০ থেকে ৩৬০-এর মধ্যে একটি মান, যা কালার হুইলের বিভিন্ন পয়েন্টকে নির্দেশ করে।
কোটলিন
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) )
জাভা
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
মার্কারের অস্বচ্ছতা কাস্টমাইজ করুন
আপনি MarkerOptions.alpha() মেথড ব্যবহার করে একটি মার্কারের অস্বচ্ছতা নিয়ন্ত্রণ করতে পারেন। আলফা অবশ্যই 0.0 এবং 1.0-এর মধ্যে একটি ফ্লোট সংখ্যা হিসেবে উল্লেখ করতে হবে, যেখানে 0 হলো সম্পূর্ণ স্বচ্ছ এবং 1 হলো সম্পূর্ণ অস্বচ্ছ।
কোটলিন
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .alpha(0.7f) )
জাভা
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker(new MarkerOptions() .position(melbourneLocation) .alpha(0.7f));
মার্কার ইমেজটি কাস্টমাইজ করুন
আপনি ডিফল্ট মার্কার ইমেজটি একটি কাস্টম মার্কার ইমেজ দিয়ে প্রতিস্থাপন করতে পারেন, যাকে প্রায়শই আইকন বলা হয়। কাস্টম আইকনগুলো সর্বদা একটি BitmapDescriptor হিসেবে সেট করা হয় এবং BitmapDescriptorFactory ক্লাসের যেকোনো একটি মেথড ব্যবহার করে সংজ্ঞায়িত করা হয়।
-
fromAsset(String assetName) - অ্যাসেটস ডিরেক্টরিতে থাকা একটি বিটম্যাপ ইমেজের নাম ব্যবহার করে একটি কাস্টম মার্কার তৈরি করে।
-
fromBitmap(Bitmap image) - বিটম্যাপ ছবি থেকে একটি কাস্টম মার্কার তৈরি করে।
-
fromFile(String fileName) - অভ্যন্তরীণ স্টোরেজে অবস্থিত একটি বিটম্যাপ ইমেজ ফাইলের নাম ব্যবহার করে একটি কাস্টম আইকন তৈরি করে।
-
fromPath(String absolutePath) - একটি বিটম্যাপ ইমেজের অ্যাবসোলিউট ফাইল পাথ থেকে একটি কাস্টম মার্কার তৈরি করে।
-
fromResource(int resourceId) - একটি বিটম্যাপ ইমেজের রিসোর্স আইডি ব্যবহার করে একটি কাস্টম মার্কার তৈরি করে।
নিচের কোড স্নিপেটটি একটি কাস্টম আইকনসহ একটি মার্কার তৈরি করে।
কোটলিন
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .title("Melbourne") .snippet("Population: 4,137,400") .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)) )
জাভা
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation) .title("Melbourne") .snippet("Population: 4,137,400") .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));
একটি মার্কার সমতল করুন
মার্কার আইকনগুলো সাধারণত স্ক্রিনের সাপেক্ষে আঁকা হয়; ম্যাপ ঘোরানো, কাত করা বা জুম করলে মার্কারের অভিমুখ পরিবর্তন হয় না। আপনি একটি মার্কারের অভিমুখ পৃথিবীর সাথে সমতলে সেট করতে পারেন। এইভাবে অভিমুখী মার্কারগুলো ম্যাপ ঘোরানোর সাথে সাথে ঘুরবে এবং ম্যাপ কাত করলে তাদের দৃষ্টিকোণ পরিবর্তিত হবে। ম্যাপ জুম ইন বা আউট করা হলেও সমতল মার্কারগুলো তাদের আকার বজায় রাখবে।
মার্কারের অভিমুখ পরিবর্তন করতে, মার্কারটির flat প্রপার্টি true তে সেট করুন।
কোটলিন
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .flat(true) )
জাভা
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .flat(true));
একটি মার্কার ঘোরান
আপনি Marker setRotation() মেথড ব্যবহার করে একটি মার্কারকে তার অ্যাঙ্কর পয়েন্টের চারপাশে ঘোরাতে পারেন। এই ঘূর্ণন ডিফল্ট অবস্থান থেকে ঘড়ির কাঁটার দিকে ডিগ্রিতে পরিমাপ করা হয়। যখন মার্কারটি ম্যাপের উপর সমতলে থাকে, তখন এর ডিফল্ট অবস্থান হয় উত্তর দিক। যখন মার্কারটি সমতলে থাকে না, তখন এর ডিফল্ট অবস্থান উপরের দিকে থাকে এবং ঘূর্ণন এমনভাবে হয় যে মার্কারটি সর্বদা ক্যামেরার দিকে মুখ করে থাকে।
নিচের উদাহরণটি মার্কারটিকে ৯০° ঘোরায়। অ্যাঙ্কর পয়েন্ট 0.5,0.5 এ সেট করলে মার্কারটি তার ভিত্তির পরিবর্তে নিজের কেন্দ্রকে ঘিরে ঘোরে।
কোটলিন
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .anchor(0.5f, 0.5f) .rotation(90.0f) )
জাভা
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .anchor(0.5f,0.5f) .rotation(90.0f));
মার্কার z-সূচক
z-index মানচিত্রে থাকা অন্যান্য মার্কারের সাপেক্ষে এই মার্কারটির অবস্থান নির্দিষ্ট করে। উচ্চ z-index যুক্ত মার্কার নিম্ন z-index যুক্ত মার্কারগুলোর উপরে আঁকা হয়। ডিফল্ট z-index মান হলো 0 ।
নিম্নলিখিত কোড স্নিপেটে দেখানো অনুযায়ী, MarkerOptions.zIndex() কল করে মার্কারের অপশনস অবজেক্টে z-index সেট করুন:
কোটলিন
map.addMarker( MarkerOptions() .position(LatLng(10.0, 10.0)) .title("Marker z1") .zIndex(1.0f) )
জাভা
map.addMarker(new MarkerOptions() .position(new LatLng(10, 10)) .title("Marker z1") .zIndex(1.0f));
আপনি Marker.getZIndex() কল করে মার্কারের z-index জানতে পারেন, এবং Marker.setZIndex() কল করে তা পরিবর্তন করতে পারেন।
অন্যান্য ওভারলেগুলির z-index নির্বিশেষে, মার্কারগুলি সর্বদা টাইল লেয়ার এবং অন্যান্য নন-মার্কার ওভারলেগুলির (গ্রাউন্ড ওভারলে, পলিলাইন, পলিগন এবং অন্যান্য আকৃতি) উপরে আঁকা হয়। অন্যান্য ওভারলেগুলির তুলনায় মার্কারগুলিকে কার্যকরভাবে একটি পৃথক z-index গ্রুপে বিবেচনা করা হয়।
ক্লিক ইভেন্টের উপর z-index-এর প্রভাব সম্পর্কে নিচে পড়ুন।
মার্কার ইভেন্টগুলি পরিচালনা করুন
ম্যাপস এপিআই আপনাকে মার্কার ইভেন্ট শুনতে এবং তাতে সাড়া দিতে দেয়। এই ইভেন্টগুলো শোনার জন্য, আপনাকে অবশ্যই সেই GoogleMap অবজেক্টে সংশ্লিষ্ট লিসেনারটি সেট করতে হবে, যেটির সাথে মার্কারগুলো সম্পর্কিত। যখন ম্যাপের কোনো একটি মার্কারে ইভেন্টটি ঘটে, তখন লিসেনারের কলব্যাকটি চালু হবে এবং সংশ্লিষ্ট Marker অবজেক্টটি একটি প্যারামিটার হিসেবে পাঠানো হবে। এই Marker অবজেক্টটিকে আপনার নিজের Marker অবজেক্টের রেফারেন্সের সাথে তুলনা করার জন্য, আপনাকে অবশ্যই equals() ব্যবহার করতে হবে, == নয়।
আপনি নিম্নলিখিত অনুষ্ঠানগুলো শুনতে পারেন:
মার্কার ক্লিক ইভেন্ট
মার্কারের ক্লিক ইভেন্ট শোনার জন্য আপনি একটি OnMarkerClickListener ব্যবহার করতে পারেন। ম্যাপে এই লিসেনারটি সেট করতে, GoogleMap.setOnMarkerClickListener(OnMarkerClickListener) কল করুন। যখন কোনো ব্যবহারকারী একটি মার্কারে ক্লিক করেন, তখন onMarkerClick(Marker) কল করা হবে এবং মার্কারটি একটি আর্গুমেন্ট হিসেবে পাস করা হবে। এই মেথডটি একটি বুলিয়ান রিটার্ন করে যা নির্দেশ করে যে আপনি ইভেন্টটি গ্রহণ করেছেন কিনা (অর্থাৎ, আপনি ডিফল্ট আচরণটি দমন করতে চান কিনা)। যদি এটি false রিটার্ন করে, তাহলে আপনার কাস্টম আচরণের পাশাপাশি ডিফল্ট আচরণটিও ঘটবে। একটি মার্কার ক্লিক ইভেন্টের ডিফল্ট আচরণ হলো এর তথ্য উইন্ডো দেখানো (যদি থাকে) এবং ক্যামেরাটিকে এমনভাবে সরানো যাতে মার্কারটি ম্যাপের কেন্দ্রে থাকে।
ক্লিক ইভেন্টের উপর z-সূচকের প্রভাব:
- যখন কোনো ব্যবহারকারী একাধিক মার্কারের একটি গুচ্ছে ক্লিক করেন, তখন সর্বোচ্চ z-index যুক্ত মার্কারটির জন্য ক্লিক ইভেন্টটি ট্রিগার হয়।
- প্রতি ক্লিকে সর্বাধিক একটি ইভেন্ট ট্রিগার হয়। অন্য কথায়, ক্লিকটি মার্কার বা কম z-index মানযুক্ত অন্যান্য ওভারলেগুলিতে স্থানান্তরিত হয় না।
- মার্কারের একটি গুচ্ছে ক্লিক করলে পরবর্তী ক্লিকগুলো গুচ্ছটির মধ্যে দিয়ে পর্যায়ক্রমে প্রতিটি মার্কারকে নির্বাচন করে। এই চক্রের ক্রমে প্রথমে z-index এবং তারপর ক্লিক বিন্দুর নৈকট্যকে অগ্রাধিকার দেওয়া হয়।
- যদি ব্যবহারকারী ক্লাস্টারের নিকটবর্তী অঞ্চলের বাইরে ক্লিক করেন, তাহলে এপিআই ক্লাস্টারটি পুনরায় গণনা করে এবং ক্লিক চক্রের অবস্থা রিসেট করে দেয়, যাতে এটি শুরু থেকে আবার শুরু হয়।
- অন্যান্য ওভারলে বা শেপের (পলিলাইন, পলিগন, বৃত্ত এবং/অথবা গ্রাউন্ড ওভারলে) z-index যাই হোক না কেন, মার্কারগুলোকে কার্যকরভাবে তাদের থেকে একটি আলাদা z-index গ্রুপে বিবেচনা করা হয়। যদি একাধিক মার্কার, ওভারলে বা শেপ একে অপরের উপর স্থাপন করা থাকে, তাহলে ক্লিক ইভেন্টটি প্রথমে মার্কারগুলোর ক্লাস্টারের মধ্যে দিয়ে আবর্তিত হয়।
মার্কার ড্র্যাগ ইভেন্ট
আপনি একটি মার্কারের ড্র্যাগ ইভেন্ট শোনার জন্য একটি OnMarkerDragListener ব্যবহার করতে পারেন। ম্যাপে এই লিসেনারটি সেট করতে, GoogleMap.setOnMarkerDragListener কল করুন। একটি মার্কার ড্র্যাগ করতে, ব্যবহারকারীকে অবশ্যই মার্কারটির উপর লং প্রেস করতে হবে। যখন ব্যবহারকারী স্ক্রিন থেকে তার আঙুল সরিয়ে নেন, মার্কারটি সেই অবস্থানেই থেকে যাবে। যখন একটি মার্কার ড্র্যাগ করা হয়, তখন প্রাথমিকভাবে onMarkerDragStart(Marker) কল করা হয়। মার্কারটি ড্র্যাগ করার সময়, onMarkerDrag(Marker) ক্রমাগত কল হতে থাকে। ড্র্যাগ শেষ হলে onMarkerDragEnd(Marker) কল করা হয়। আপনি যেকোনো সময় Marker.getPosition() কল করে মার্কারটির অবস্থান জানতে পারেন।