Created
November 27, 2019 11:14
-
-
Save mhd-zulqarnain/56823bd60199825b3c31ee8846bde3a4 to your computer and use it in GitHub Desktop.
Interactiveinfowindow using InteractiveInfoWindowAndroid with fragment and multiple formview .Marker coordinates will be fetch from server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.reactivelogix.nefsy.nearby | |
import android.location.Location | |
import android.os.Bundle | |
import android.support.v4.app.Fragment | |
import android.util.Log | |
import android.view.LayoutInflater | |
import android.view.View | |
import android.view.ViewGroup | |
import com.appolica.interactiveinfowindow.InfoWindow | |
import com.appolica.interactiveinfowindow.InfoWindow.MarkerSpecification | |
import com.appolica.interactiveinfowindow.InfoWindowManager | |
import com.appolica.interactiveinfowindow.fragment.MapInfoWindowFragment | |
import com.google.android.gms.location.LocationCallback | |
import com.google.android.gms.location.LocationRequest | |
import com.google.android.gms.location.LocationResult | |
import com.google.android.gms.location.LocationServices | |
import com.google.android.gms.maps.CameraUpdateFactory | |
import com.google.android.gms.maps.GoogleMap | |
import com.google.android.gms.maps.GoogleMap.OnCameraMoveStartedListener.REASON_API_ANIMATION | |
import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener | |
import com.google.android.gms.maps.OnMapReadyCallback | |
import com.google.android.gms.maps.model.LatLng | |
import com.google.android.gms.maps.model.Marker | |
import com.google.android.gms.maps.model.MarkerOptions | |
import com.google.gson.Gson | |
import com.google.gson.JsonObject | |
import com.google.maps.android.SphericalUtil | |
import com.reactivelogix.nefsy.R | |
import com.reactivelogix.nefsy.models.StoreNearBy | |
import com.reactivelogix.nefsy.utilities.NetworkUtils | |
import com.reactivelogix.nefsy.utilities.ServiceError | |
import com.reactivelogix.nefsy.utilities.ServiceListener | |
import com.reactivelogix.nefsy.utilities.Utils | |
import com.reactivelogix.nefsy.webservices.ServiceHandler | |
import retrofit2.Call | |
import retrofit2.Callback | |
import retrofit2.Response | |
class NearByMapViewFragment : Fragment(), | |
OnMarkerClickListener, | |
GoogleMap.OnCameraMoveStartedListener { | |
var mMap: GoogleMap? = null | |
val TAG = "MapViewFragment" | |
var onceaniamte = true | |
private var infoWindowManager: InfoWindowManager? = null | |
private var mapInfoWindowFragment: MapInfoWindowFragment? = null | |
private var infoMap = HashMap<String, InfoWindow>() | |
private var lastLatLng: LatLng? = null | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
} | |
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, | |
savedInstanceState: Bundle?): View? { | |
val view = inflater.inflate(R.layout.fragment_near_by_map_view, container, false) | |
mapInfoWindowFragment = childFragmentManager.findFragmentById(R.id.infoWindowMap) as MapInfoWindowFragment | |
infoWindowManager = mapInfoWindowFragment!!.infoWindowManager() | |
onMapReady() | |
return view | |
} | |
fun onMapReady() { | |
mapInfoWindowFragment!!.getMapAsync(object : OnMapReadyCallback { | |
override fun onMapReady(p0: GoogleMap?) { | |
mMap = p0 | |
mMap!!.getUiSettings().setMapToolbarEnabled(false) | |
mMap!!.getUiSettings().setZoomControlsEnabled(false); | |
mMap!!.setMinZoomPreference(11f) | |
// getStores("55.3847480379045 25.172754325291166") | |
} | |
}) | |
} | |
fun getStores(latlng:LatLng) { | |
//hit the api and get the reponse | |
//StoreNearBy | |
showLocationsOnMap(serverResponse) | |
mMap!!.setOnCameraMoveStartedListener(this) | |
} | |
private fun showLocationsOnMap(serverResponse: List<StoreNearBy>) { | |
val mLocations: ArrayList<StoreNearBy> = ArrayList() | |
mLocations.addAll(serverResponse) | |
if (onceaniamte) { | |
mMap!!.animateCamera( | |
CameraUpdateFactory.newLatLngZoom( | |
LatLng(serverResponse[0].branchLat, | |
serverResponse[0].branchLong), | |
12.0f)) | |
onceaniamte = false | |
} | |
onceaniamte = false | |
var latitude: Float | |
var longitude: Float | |
for (location in mLocations) { | |
latitude = location.branchLat.toFloat() | |
longitude = location.branchLong.toFloat() | |
val latlang = LatLng(latitude.toDouble(), longitude.toDouble()) | |
val marker2: Marker = mMap!!.addMarker(MarkerOptions().position(latlang).snippet(location.rowId.toString())) | |
val offsetX = resources.getDimension(R.dimen.marker_offset_x).toInt() | |
val offsetY = resources.getDimension(R.dimen.marker_offset_y).toInt() | |
val markerSpec = MarkerSpecification(offsetX, offsetY) | |
//setting up formfragement | |
val obj = Gson().toJson(location) | |
val latLongStr = "$latitude $longitude" | |
val formWindow = InfoWindow( | |
marker2, | |
markerSpec, | |
FormFragment.newInstance(obj, latLongStr)) | |
infoMap.put(location.rowId!!.toString(), formWindow) | |
mMap!!.setOnMarkerClickListener(this@NearByMapViewFragment) | |
} | |
} | |
override fun onMarkerClick(p0: Marker?): Boolean { | |
val infoWindow: InfoWindow? = infoMap.get(p0!!.snippet) | |
if (infoWindow != null) { | |
infoWindowManager!!.toggle(infoWindow, true) | |
} | |
return false | |
} | |
override fun onCameraMoveStarted(p0: Int) { | |
Log.e(TAG, "OnCameraMoveStartedListener $p0") | |
if (p0 != REASON_API_ANIMATION) { | |
val lat = mMap!!.getCameraPosition().target.latitude | |
val long = mMap!!.getCameraPosition().target.longitude | |
val newLatLng = LatLng(lat, long) | |
val distance = SphericalUtil.computeDistanceBetween(lastLatLng, newLatLng) | |
Log.e(TAG, "Distance $distance") | |
if (distance > 2000) { //refresh when the pointer has distance of 2km | |
mMap!!.clear() | |
val point = "$long $lat" | |
if (!onceaniamte) | |
getStores(newLatLng) | |
lastLatLng= newLatLng | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment