android


Re-position MyLocation button inside Google Map fragment


In the Google Maps API for Android there is button located at the top-right corner, served to locate you inside the map.
I would like to know if it is possible to relocate this icon that is by default in the API of Google Maps for Android, because at the top I plan to add an EditText as if it were floating.
I can suggest 2 options.
However, I strongly advise you to use the first one - much more classic and simple:
Use Map Padding (recommended)
You can re-position any of the GoogleMap Controls by setting the Padding from the corners. In your case, I would set some padding from the top:
googleMap.setPadding(0, numTop, 0, 0); //numTop = padding of your choice
It would also change the center position of the Map Camera accordingly, which is great for that kind of use case (adding a title / other floating controls).
Disable the button and create one of your own (less recommended)
Disabling it will be easy:
googleMap.getUiSettings().setMyLocationButtonEnabled(false)
However, creating a new one would be trickier - mostly because it is harder to set a fully-functional one.
I would Create a FloatingActionButton that looks like the one on the Google Maps application (example).
You can get the Icon from here (called "My Location")
Color the Fab in Material Grey 300 (maybe 400, can't remember at the moment)
Define an onClick Event that would move the camera to the user's current location (you're going to have to use Location Service for this.
Sample:
//Acquire a reference to the system Location Manager
LocationManager locationManager =
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
//Acquire the user's location
Location selfLocation = locationManager
.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
//Move the map to the user's location
LatLng selfLoc = new LatLng(selfLocation.getLatitude(), selfLocation.getLongitude());
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(selfLoc, 15);
googleMap.moveCamera(update);
If you noticed, when you click the "My Location" button, it starts to track you and move the camera accordingly. In order to create that effect, you need to override googleMap.onCameraMove and googleMap.onCameraIdle, and code your app so whenever the camera is idle, the map will continue to follow the user, and whenever the user moved the camera, it will stop.
Sample for onCameraIdle:
//Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
//Acquire the user's location
Location selfLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
LatLng cameraLocation = googleMap.getCameraPosition().target;
float[] results = new float[3];
Location.distanceBetween(selfLocation.getLatitude(), selfLocation.getLongitude(), cameraLocation.latitude, cameraLocation.longitude, results);
if (results[0] < 30) //30 Meters, you can change that
googleMap.moveCamera(...) //Move the camera to user's location

Related Links

Is it possible to call addJavascriptInterface on a WebView created by onCreateWindow?
Logcat cuts off text with \n
Error when I switch Android activities
Just recorded Video/Audio is not played with some devices. Getting “sorry, video cannot be played”, but same video played in gallery
Possible solution for avoiding memory leak from static context reference
Best way to store & use cookies android with HTTPPost & HTTPClient?
Android Studio will not compile
Android Back-Facing Camera Not Working, but Front-Facing is Perfect
Android Gujrati and Hindi Supported Application
Android Actionbar replacing fragment is called not showing anything
List items Implementing on touch Listener Android
Logging in using username and password
Graphics Disposal error
Admob Support for Kivy (Python for Android)
ImageFactory.imageAsResized returns null
Weird! Fatal signal 11 when drawing outside screen bounds

Categories

HOME
3d
sitecore
apiblueprint
solver
ms-access-2016
opendj
bitbucket-api
tail
tvos
data-visualization
minecraft-forge
drop-down-menu
flash-player
atlassian
magnetic-cards
azure-iot-hub
atlassian-stash
feathersjs
chargify
template-engine
mapstruct
database-connection
systemtime
comparator
data.stackexchange.com
google-cloud-print
surveymonkey
fable-f#
corenlp-server
volatile
glib
playstation-portable
openwhisk
vue-chartjs
git-rewrite-history
release
health-monitoring
typesafe-config
attributeerror
branching-and-merging
android-ibeacon
preloader
sharp-snmp
install.packages
clang++
term
twilio-click-to-call
openblas
context-switch
static-cast
cup
polyline
docpad
tinkerpop3
file-uri
dup
refinerycms
deep
uiactionsheet
ellucian-scribe
user-management
toran-proxy
xvim
binomial-theorem
dot.js
dbaccess
showdialog
imagefilter
file-not-found
ecslidingviewcontroller
oocss
unit-of-work
ui-select2
node-blade
abstract-data-type
joomla-template
pdfviewer
monotouch.dialog
cuda-gdb
subproject
winmain
silent
web-garden
mathematical-notation
sun
xpsdocument
scrubyt
wspbuilder

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App