Android Open Source - android Bounded Map Fragment






From Project

Back to project page android.

License

The source code is released under:

Apache License

If you think the Android project android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.github.digin.android.fragments;
//from   w ww.j  a v a  2 s  .c  o m
import android.location.Location;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.github.digin.android.Utils;
import com.github.digin.android.constants.LocationDataHolder;
import com.github.digin.android.constants.MapOverlayData;
import com.github.digin.android.logging.AnalyticsHelper;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;


public class BoundedMapFragment extends MapFragment implements GoogleMap.OnMapClickListener {

    private static LatLng CENTER = new LatLng(39.766862, -86.171805);
    private final LatLngBounds BOUNDS = new LatLngBounds(new LatLng(39.766111, -86.173218), new LatLng(39.767892, -86.170160));
    private final int MAX_ZOOM = 22;
    private final int MIN_ZOOM = 17;
    private GoogleMap mMap = getMap();

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mMap = getMap();
        CameraUpdate upd = CameraUpdateFactory.newLatLngZoom(CENTER, 17);
        mMap.moveCamera(upd);
        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        mMap.setIndoorEnabled(false);
        mMap.setMyLocationEnabled(false);

        mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
            @Override
            public void onCameraChange(CameraPosition position) {

                float[] results = new float[1];
                Location.distanceBetween(position.target.latitude, position.target.longitude,
                        39.766862, -86.172005, results);

                float zoom = 0;
                LatLng correction;

                if (position.zoom < MIN_ZOOM) zoom = MIN_ZOOM;
                if (position.zoom > MAX_ZOOM) zoom = MAX_ZOOM;

                if (results[0] > 600) {
                    correction = CENTER;
                } else {
                    correction = getLatLngCorrection(position.target);
                }

                if (zoom != 0 || correction.latitude != 0 || correction.longitude != 0) {
                    zoom = (zoom == 0) ? position.zoom : zoom;
                    CameraPosition newPosition = new CameraPosition(correction, zoom, position.tilt, position.bearing);
                    CameraUpdate update = CameraUpdateFactory.newCameraPosition(newPosition);
                    mMap.animateCamera(update);
                }
            }
        });

        mMap.setOnMapClickListener(this);

        AnalyticsHelper.sendScreenView(getActivity(), BoundedMapFragment.class, "Map");
    }

    private void initMap() {
        MapOverlayData.buildMap(getActivity(), mMap);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Utils.fixForActionBarHeight(getActivity(), view);
    }

    @Override
    public void onMapClick(LatLng latLng) {
        LocationDataHolder locationDataHolder = MapOverlayData.getTitleForClick(latLng);
        if (locationDataHolder == null) return;

        openFragmentForLocation(locationDataHolder);

        Toast.makeText(getActivity(), locationDataHolder.getName(), Toast.LENGTH_SHORT).show();
    }

    private void openFragmentForLocation(LocationDataHolder locationDataHolder) {

    }

    /**
     * Returns the correction for Lat and Lng if camera is trying to get outside of visible map
     *
     * @param point Current camera bounds
     * @return Latitude and Longitude corrections to get back into bounds.
     */
    private LatLng getLatLngCorrection(LatLng point) {

        double lng, lat;
        lng = point.longitude;
        lat = point.latitude;
        if (point.longitude < BOUNDS.southwest.longitude)
            lng = BOUNDS.southwest.longitude;
        else if (point.longitude > BOUNDS.northeast.longitude)
            lng = BOUNDS.northeast.longitude;

        if (point.latitude < BOUNDS.southwest.latitude)
            lat = BOUNDS.southwest.latitude;
        else if (point.latitude > BOUNDS.northeast.latitude)
            lat = BOUNDS.northeast.latitude;

        return new LatLng(lat, lng);
    }

    @Override
    public void onPause() {
        super.onPause();
        mMap.clear();
    }

    @Override
    public void onResume() {
        super.onResume();
        initMap();
    }
}




Java Source Code List

com.github.digin.android.ApplicationTest.java
com.github.digin.android.DiginApplication.java
com.github.digin.android.ImageCacheEntry.java
com.github.digin.android.NavDrawerController.java
com.github.digin.android.NavDrawerItem.java
com.github.digin.android.Utils.java
com.github.digin.android.activities.MainActivity.java
com.github.digin.android.adapters.ChefListAdapter.java
com.github.digin.android.adapters.NavDrawerAdapter.java
com.github.digin.android.adapters.ParticipantListAdapter.java
com.github.digin.android.constants.LocationDataHolder.java
com.github.digin.android.constants.MapOverlayData.java
com.github.digin.android.constants.ParseID.java
com.github.digin.android.constants.ParseKeys.java
com.github.digin.android.constants.Station.java
com.github.digin.android.exceptions.InvalidClassException.java
com.github.digin.android.factories.BreweryFactory.java
com.github.digin.android.factories.ChefFactory.java
com.github.digin.android.factories.WineryFactory.java
com.github.digin.android.fragments.BoundedMapFragment.java
com.github.digin.android.fragments.BreweriesFragment.java
com.github.digin.android.fragments.BreweryDetailsFragment.java
com.github.digin.android.fragments.ChefListFragment.java
com.github.digin.android.fragments.DetailsFragment.java
com.github.digin.android.fragments.DeveloperFragment.java
com.github.digin.android.fragments.DiginAboutFragment.java
com.github.digin.android.fragments.FavoritesFragment.java
com.github.digin.android.fragments.LineupListFragment.java
com.github.digin.android.fragments.ParticipantDetailsFragment.java
com.github.digin.android.fragments.WineriesFragment.java
com.github.digin.android.fragments.WineryDetailsFragment.java
com.github.digin.android.listeners.OnBoundsQueryListener.java
com.github.digin.android.listeners.OnBoundsRetrievalListener.java
com.github.digin.android.listeners.OnParticipantQueryListener.java
com.github.digin.android.listeners.OnSingleParticipantQueryListener.java
com.github.digin.android.logging.AnalyticsHelper.java
com.github.digin.android.logging.Logger.java
com.github.digin.android.models.Brewery.java
com.github.digin.android.models.Chef.java
com.github.digin.android.models.ParseBackedModel.java
com.github.digin.android.models.Participant.java
com.github.digin.android.models.TemporaryParticipantPlaceholder.java
com.github.digin.android.models.Winery.java
com.github.digin.android.models.map.BoundPoint.java
com.github.digin.android.models.map.Bounds.java
com.github.digin.android.repositories.BoundsStore.java
com.github.digin.android.repositories.BreweryStore.java
com.github.digin.android.repositories.ChefsStore.java
com.github.digin.android.repositories.FavoritesStore.java
com.github.digin.android.repositories.WineryStore.java
com.github.digin.android.tasks.ParseAllBoundsTask.java
com.github.digin.android.tasks.ParseAllBreweriesTask.java
com.github.digin.android.tasks.ParseAllChefsTask.java
com.github.digin.android.tasks.ParseAllWineriesTask.java
com.nirhart.parallaxscroll.views.ParallaxExpandableListView.java
com.nirhart.parallaxscroll.views.ParallaxListViewHelper.java
com.nirhart.parallaxscroll.views.ParallaxListView.java
com.nirhart.parallaxscroll.views.ParallaxScrollView.java
com.nirhart.parallaxscroll.views.ParallaxedView.java