SHARE
TWEET

Untitled

a guest Jul 12th, 2019 43 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package com.sajjady.simplegis;
  2.  
  3. import androidx.annotation.NonNull;
  4. import androidx.appcompat.app.AppCompatActivity;
  5.  
  6. import android.annotation.SuppressLint;
  7. import android.graphics.BitmapFactory;
  8. import android.graphics.Color;
  9. import android.graphics.PointF;
  10. import android.os.Bundle;
  11. import android.os.Handler;
  12. import android.util.Log;
  13. import android.view.MotionEvent;
  14. import android.view.View;
  15. import android.view.ViewOverlay;
  16. import android.widget.Button;
  17.  
  18. import com.mapbox.android.gestures.AndroidGesturesManager;
  19. import com.mapbox.android.gestures.BaseGesture;
  20. import com.mapbox.android.gestures.ShoveGestureDetector;
  21. import com.mapbox.android.gestures.StandardGestureDetector;
  22. import com.mapbox.geojson.Feature;
  23. import com.mapbox.geojson.FeatureCollection;
  24. import com.mapbox.geojson.LineString;
  25. import com.mapbox.geojson.Point;
  26. import com.mapbox.mapboxsdk.Mapbox;
  27. import com.mapbox.mapboxsdk.geometry.LatLng;
  28. import com.mapbox.mapboxsdk.maps.MapView;
  29. import com.mapbox.mapboxsdk.maps.MapboxMap;
  30. import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
  31. import com.mapbox.mapboxsdk.maps.Projection;
  32. import com.mapbox.mapboxsdk.maps.Style;
  33. import com.mapbox.mapboxsdk.plugins.annotation.LineManager;
  34. import com.mapbox.mapboxsdk.plugins.annotation.SymbolManager;
  35. import com.mapbox.mapboxsdk.plugins.annotation.SymbolOptions;
  36. import com.mapbox.mapboxsdk.style.layers.LineLayer;
  37. import com.mapbox.mapboxsdk.style.layers.Property;
  38. import com.mapbox.mapboxsdk.style.layers.PropertyFactory;
  39. import com.mapbox.mapboxsdk.style.layers.SymbolLayer;
  40. import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
  41. import com.mapbox.mapboxsdk.style.sources.GeoJsonSource;
  42.  
  43. import java.util.ArrayList;
  44.  
  45.  
  46. public class MainActivity extends AppCompatActivity {
  47.     private MapboxMap mapboxMap;
  48.     private static final String TAG = "MainActivity";
  49.     private MapView mapView;
  50.     private Button buttonMove;
  51.     private Boolean mapIsMotionLess = false;
  52.     private LineManager lineManager;
  53.     private Handler handler = new Handler();
  54.     private Style style;
  55.     private AndroidGesturesManager gesturesManager;
  56.     private LatLng animatedPosition;
  57.     private Boolean screenIsLockedFor = false;
  58.     private GeoJsonSource geoJsonSource;
  59.     private Runnable runnableCode = new Runnable() {
  60.         @Override
  61.         public void run() {
  62.             if (gesturesManager.getDetectors().get(0).getCurrentEvent().getAction() != MotionEvent.ACTION_UP) {
  63.                 handler.postDelayed(this, 100);
  64.             } else {
  65.                 screenIsLockedFor = false;
  66.                 removeLayerAndSource(style, "linelayer", "line-source");
  67.                 handler.removeCallbacks(this);
  68.             }
  69.         }
  70.  
  71.     };
  72.  
  73.     // Create the Handler object (on the main thread by default)
  74.     @SuppressLint("ClickableViewAccessibility")
  75.     @Override
  76.     protected void onCreate(Bundle savedInstanceState) {
  77.         super.onCreate(savedInstanceState);
  78.         Mapbox.getInstance(this, "sk.eyJ1Ijoic2R5dXNzdWYiLCJhIjoiY2p4ZmxoOWoyMDhteTNubDFnMnJzZjJmZSJ9.Ac-TKeogqZR7iNzChWSFxA");
  79.         setContentView(R.layout.activity_main);
  80.  
  81.         buttonMove = findViewById(R.id.lock_move);
  82.         mapView = findViewById(R.id.mapView);
  83.         mapView.onCreate(savedInstanceState);
  84.         mapView.getMapAsync(new OnMapReadyCallback() {
  85.             @Override
  86.             public void onMapReady(@NonNull MapboxMap mapboxMap) {
  87.                 MainActivity.this.mapboxMap = mapboxMap;
  88.                 mapboxMap.setStyle(Style.LIGHT, new Style.OnStyleLoaded() {
  89.  
  90.                     @SuppressLint("ClickableViewAccessibility")
  91.                     @Override
  92.                     public void onStyleLoaded(@NonNull Style style) {
  93.                         MainActivity.this.style = style;
  94.                         style.setTransition(new TransitionOptions(0, 0, true));
  95.                         style.addImage("marker-icon-id",
  96.                                 BitmapFactory.decodeResource(
  97.                                         MainActivity.this.getResources(), R.drawable.mapbox_marker_icon_default));
  98.                         GeoJsonSource geoJsonSource = new GeoJsonSource("source-id", Feature.fromGeometry(
  99.                                 Point.fromLngLat(-87.679, 41.885)));
  100.                         style.addSource(geoJsonSource);
  101.                         SymbolLayer symbolLayer = new SymbolLayer("layer-id", "source-id");
  102.                         symbolLayer.withProperties(
  103.                                 PropertyFactory.iconImage("marker-icon-id")
  104.                         );
  105.                         style.addLayer(symbolLayer);
  106.                         //------
  107.                         // second marker
  108.                         style.addImage("marker-icon-id2",
  109.                                 BitmapFactory.decodeResource(
  110.                                         MainActivity.this.getResources(), R.drawable.mapbox_marker_icon_default));
  111.                         GeoJsonSource geoJsonSource2 = new GeoJsonSource("source-id2", Feature.fromGeometry(
  112.                                 Point.fromLngLat(36.2605, 59.6168)));
  113.                         style.addSource(geoJsonSource2);
  114.                         SymbolLayer symbolLayer2 = new SymbolLayer("layer-id2", "source-id2");
  115.                         symbolLayer2.withProperties(
  116.                                 PropertyFactory.iconImage("marker-icon-id2")
  117.                         );
  118.                         style.addLayer(symbolLayer2);
  119.                         lineManager = new LineManager(mapView, mapboxMap, style);
  120.                         buttonMove.setOnClickListener(new View.OnClickListener() {
  121.                             @Override
  122.                             public void onClick(View view) {
  123.                                 changeMapMotionStatus();
  124.                             }
  125.                         });
  126.  
  127.                         AndroidGesturesManager gesturesManager = mapboxMap.getGesturesManager();
  128.                         MainActivity.this.gesturesManager = gesturesManager;
  129.                         gesturesManager.setStandardGestureListener(new StandardGestureDetector.StandardOnGestureListener() {
  130.                             @Override
  131.                             public boolean onSingleTapConfirmed(MotionEvent motionEvent) {
  132.                                 return false;
  133.                             }
  134.  
  135.                             @Override
  136.                             public boolean onDoubleTap(MotionEvent motionEvent) {
  137.                                 return false;
  138.                             }
  139.  
  140.                             @Override
  141.                             public boolean onDoubleTapEvent(MotionEvent motionEvent) {
  142.                                 return false;
  143.                             }
  144.  
  145.                             @Override
  146.                             public boolean onDown(MotionEvent motionEvent) {
  147.                                 if (mapIsMotionLess) {
  148.                                     if (!screenIsLockedFor) {
  149.                                         handler.post(runnableCode);
  150.                                     }
  151.                                     screenIsLockedFor = true;
  152.                                     matchLine(motionEvent, style);
  153.                                 }
  154.                                 return true;
  155.                             }
  156.  
  157.                             @Override
  158.                             public void onShowPress(MotionEvent motionEvent) {
  159.  
  160.                             }
  161.  
  162.                             @Override
  163.                             public boolean onSingleTapUp(MotionEvent motionEvent) {
  164.                                 return false;
  165.                             }
  166.  
  167.                             @Override
  168.                             public boolean onScroll(MotionEvent firstEvent, MotionEvent secondEvent, float distanceX, float distanceY) {
  169.                                 if (mapIsMotionLess) {
  170.                                     if (!screenIsLockedFor) {
  171.                                         handler.post(runnableCode);
  172.                                     }
  173.                                     screenIsLockedFor = true;
  174.                                     matchLine(secondEvent, style);
  175.                                     Log.e(TAG, "onScroll: second" + secondEvent.getAction());
  176.                                 }
  177.                                 return true;
  178.                             }
  179.  
  180.                             @Override
  181.                             public void onLongPress(MotionEvent motionEvent) {
  182.                                 removeLayerAndSource(style, "linelayer", "line-source");
  183.                             }
  184.  
  185.                             @Override
  186.                             public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
  187.                                 return false;
  188.                             }
  189.                         });
  190.  
  191.                     }
  192.                 });
  193.             }
  194.         });
  195.     }
  196.  
  197.     private void changeMapMotionStatus() {
  198.         mapboxMap.getUiSettings().setZoomGesturesEnabled(mapIsMotionLess);
  199.         mapboxMap.getUiSettings().setScrollGesturesEnabled(mapIsMotionLess);
  200.         mapIsMotionLess = !mapIsMotionLess;
  201.     }
  202.  
  203.     // Add the mapView's own lifecycle methods to the activity's lifecycle methods
  204.     @Override
  205.     public void onStart() {
  206.         super.onStart();
  207.         mapView.onStart();
  208.     }
  209.  
  210.     @Override
  211.     public void onResume() {
  212.         super.onResume();
  213.         mapView.onResume();
  214.     }
  215.  
  216.     @Override
  217.     public void onPause() {
  218.         super.onPause();
  219.         mapView.onPause();
  220.     }
  221.  
  222.     @Override
  223.     public void onStop() {
  224.         super.onStop();
  225.         mapView.onStop();
  226.     }
  227.  
  228.     @Override
  229.     public void onLowMemory() {
  230.         super.onLowMemory();
  231.         mapView.onLowMemory();
  232.     }
  233.  
  234.     @Override
  235.     protected void onDestroy() {
  236.         super.onDestroy();
  237.         mapView.onDestroy();
  238.     }
  239.  
  240.     @Override
  241.     protected void onSaveInstanceState(Bundle outState) {
  242.         super.onSaveInstanceState(outState);
  243.         mapView.onSaveInstanceState(outState);
  244.     }
  245.  
  246.     private void matchLine(MotionEvent motionEvent, @NonNull Style style) {
  247.         LatLng endPointLatLng = motionEventPointToLatLng(new PointF(), motionEvent);
  248.         ArrayList<Point> routeCoordinates = getCoordinates(endPointLatLng);
  249.         if (style.getSource("line-source") == null) {
  250.             drawLine(style, routeCoordinates);
  251.         } else {
  252.             geoJsonSource.setGeoJson(FeatureCollection.fromFeatures(new Feature[]{Feature.fromGeometry(
  253.                     LineString.fromLngLats(routeCoordinates)
  254.             )}));
  255.             /*removeLayerAndSource(style, "linelayer", "line-source");
  256.             drawLine(style, routeCoordinates);*/
  257.         }
  258.     }
  259.  
  260.     private LatLng motionEventPointToLatLng(PointF pointF, MotionEvent motionEvent) {
  261.         pointF.x = motionEvent.getX();
  262.         pointF.y = motionEvent.getY();
  263.         Projection projection = mapboxMap.getProjection();
  264.         return projection.fromScreenLocation(pointF);
  265.     }
  266.  
  267.     private void removeLayerAndSource(Style style, String layerName, String sourceName) {
  268.         style.removeLayer(layerName);
  269.         style.removeSource(sourceName);
  270.     }
  271.  
  272.     private ArrayList<Point> getCoordinates(LatLng endPoint) {
  273.         ArrayList<Point> routeCoordinates = new ArrayList<>();
  274.         routeCoordinates.add(Point.fromLngLat(endPoint.getLongitude(), endPoint.getLatitude()));
  275.         routeCoordinates.add(Point.fromLngLat(-87.679, 41.885));
  276.         return routeCoordinates;
  277.     }
  278.  
  279.     private void drawLine(Style style, ArrayList<Point> routeCoordinates) {
  280.         style.addLayer(new LineLayer("linelayer", "line-source").withProperties(
  281.                 PropertyFactory.lineDasharray(new Float[]{0.01f, 2f}),
  282.                 PropertyFactory.lineCap(Property.LINE_CAP_ROUND),
  283.                 PropertyFactory.lineJoin(Property.LINE_JOIN_ROUND),
  284.                 PropertyFactory.lineWidth(5f),
  285.                 PropertyFactory.lineColor(Color.parseColor("#e55e5e"))
  286.         ));
  287.         geoJsonSource = new GeoJsonSource("line-source",
  288.                 FeatureCollection.fromFeatures(new Feature[]{Feature.fromGeometry(
  289.                         LineString.fromLngLats(routeCoordinates)
  290.                 )}));
  291.         style.addSource(geoJsonSource);
  292.  
  293.     }
  294.  
  295. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top