diff --git a/README.md b/README.md index a06e097..657407e 100644 --- a/README.md +++ b/README.md @@ -1 +1,133 @@ # Curve-Fit +Android library for drawing curves on Google Maps. This library uses Bezier cubic equation in order to compute all +intermediate points of a curve. + +# Demo +

+demo +sample_india +sample_denmark

+ +# Setup +### Gradle +``` +dependencies { + compile 'com.github.sarweshkumar47:curve-fit:1.0.0' +} +``` + +### Maven +``` + + com.github.sarweshkumar47 + curve-fit + 1.0.0 + pom + +``` + +# Usage +In your activity's onCreate() method, use ```getMapAsync()``` to register for the map callback. +Implement the ```OnMapReadyCallback``` interface and override the ```onMapReady()``` method + +```java +@Override +public void onMapReady(GoogleMap googleMap) { + + // Create CurveManager object and pass googleMaps reference to it + curveManager = new CurveManager(googleMap); + + // Register a callback to be invoked after curve is drawn on map + curveManager.setOnCurveDrawnCallback(this); + + // Set a listener for curve click events. + curveManager.setOnCurveClickListener(this); + + // Create a CurveOptions object and add atleast latlong points to it + // You can set different options in CurveOptions object similar to PolyLineOptions + CurveOptions curveOptions = new CurveOptions(); + curveOptions.add(new LatLng(12.9715987, 77.5945627)); + curveOptions.add(new LatLng(12.2958104, 76.6393805)); + curveOptions.color(Color.DKGRAY); + curveOptions.setAlpha(0.5f); + curveOptions.width(12); + List pattern = Arrays.asList(new Dash(30), new Gap(30)); + curveOptions.pattern(pattern); + curveOptions.geodesic(false); + + map.addMarker(new MarkerOptions().position(sourceLatLng).anchor(0.5f, 1f)); + map.addMarker(new MarkerOptions().position(destinationLatLng).icon(BitmapDescriptorFactory + .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)).anchor(0.5f, 1f)); + + map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(12.64779202, 77.16562563), 14)); + + // Draws curve asynchronously + curveManager.drawCurveAsync(curveOptions); +} +``` + +Remove listeners in order to prevent memory leaks. +``` java +@Override +protected void onDestroy() { + if (mapFragment != null) { + mapFragment.getMapAsync(null); + mapFragment = null; + } + if (curveManager != null) { + curveManager.unregister(); + curveManager.setOnCurveDrawnCallback(null); + curveManager.setOnCurveClickListener(null); + curveManager = null; + } + super.onDestroy(); +} + +``` +Check example projects for more info. + +# Advanced usage + +### CurveOptions + +* __Alpha__ +```java +CurveOptions setAlpha(float alpha) +``` + +Defines shape and direction of the curve. Alpha range can vary from -1 to 1 + + +* __ComputePointsBasedOnScreenPixels__ +```java +CurveOptions setComputePointsBasedOnScreenPixels(boolean computePointsBasedOnPixels) +``` + +If set to ```true```, geographic location points will be converted to screen pixel points and algorithm uses screen pixel points +to compute all curve points. + +# Contributions +Contributions are welcome and much appreciated. + +# Credit +### Icons and images +*
Icons made by DinosoftLabs from www.flaticon.com is licensed by CC 3.0 BY
+ +* https://upload.wikimedia.org/wikipedia/commons/d/d5/India_gate.jpg + + + +# License + Copyright 2018 Sarweshkumar C R + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.