For Live Animate Camera

0
         
 Fragment View Pager


package in.co.vibrant.employeetracking.view;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.StrictMode;
import android.os.SystemClock;
import android.text.InputType;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.fragment.app.FragmentActivity;

import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MapStyleOptions;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;

import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import in.co.vibrant.employeetracking.R;
import in.co.vibrant.employeetracking.db.DBHelper;
import in.co.vibrant.employeetracking.modal.HistoryModel;
import in.co.vibrant.employeetracking.modal.UserDetailsModel;
import in.co.vibrant.employeetracking.util.APIUrl;
import in.co.vibrant.employeetracking.util.AlertDialogManager;
import in.co.vibrant.employeetracking.util.GetDeviceImei;


public class HistoryPage extends AppCompatActivity implements OnMapReadyCallback {

    Toolbar toolbar;
    private GoogleMap mMap;
    double lat = 0.00, lng = 0.00;
    TextView currentAddress, lastUpdate, speed;
    String vehicle;
    List list;
    List loginUserDetailsList;
    LatLng latlng;
    Button btn;
    private long timeRemaining = 0;
    //long millisInFuture = 50000000; //30 seconds
    long countDownInterval = 2000; //1 second
    float durationInMs = 2000;
    //Declare a variable to hold count down timer's paused status
    private boolean isPaused = false;
    //Declare a variable to hold count down timer's paused status
    private boolean isCanceled = false;
    private boolean isStart = false;
    int i = 0;
    String address;
    JSONArray serverData;
    ArrayList dataList;
    PolylineOptions pline;
    private DBHelper dbh;
    private SQLiteDatabase db;
    AlertDialog dialogPopup;
    Context context;
    String userId = "0";
    String historyDate, startTimeStr, endTimeStr;
    //Spinner speedSpinner;
    CountDownTimer timer;
    EditText fromtime;
    EditText totime;
    EditText date;
    AlertDialog dialog;
    String currentDate = "", fromtimes = "", totimes = "";
    int mHour;
    int mMinute;
    String USERCODE;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = HistoryPage.this;
        setContentView(R.layout.history_tracking);
        try {
            toolbar = findViewById(R.id.toolbar);
            toolbar.setTitleTextColor(Color.parseColor("#FFFFFF"));
            setTitle("History Tracking");
            toolbar.setTitle("History Tracking");
            dbh = new DBHelper(context);
            loginUserDetailsList = dbh.getUserDetailsModel();
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            USERCODE = getIntent().getExtras().getString("USERCODE");
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onBackPressed();
                }
            });
            currentAddress = (TextView) findViewById(R.id.address);

            list = new ArrayList_LatLng_();
            btn = (Button) findViewById(R.id.btnRegister1);
            btn.setTag(0);
            //String startDate=getIntent().getExtras().getString("start");//"2017-09-15 00:00:00";
            //String endDate=getIntent().getExtras().getString("end");//"2017-09-15 22:00:00";
            //String imei=getIntent().getExtras().getString("imei");//"355488020146019";
            pline = new PolylineOptions().width(5).color(Color.MAGENTA).geodesic(true);
            // Obtain the SupportMapFragment and get notified when the map is ready to be used.
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);
            //new getLatLng().execute(startDate,endDate,imei);
            int count = 100; //Declare as inatance variable
            openDateDialogue();
        } catch (Exception e) {
            new AlertDialogManager().RedDialog(context, "Error:" + e.toString());
        }
    }

    public void openFilterData(View v) {
        openDateDialogue();
    }

    private void openDateDialogue() {
        AlertDialog.Builder dialogbilder = new AlertDialog.Builder(context);
        View mView = getLayoutInflater().inflate(R.layout.history_altbox, null);
        dialogbilder.setView(mView);

        date = mView.findViewById(R.id.date);
        fromtime = mView.findViewById(R.id.fromtime);
        totime = mView.findViewById(R.id.totime);

        date.setText(currentDate);
        date.setInputType(InputType.TYPE_NULL);
        date.setTextIsSelectable(true);
        date.setFocusable(false);
        date.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Calendar c = Calendar.getInstance();
                int mYear = c.get(Calendar.YEAR);
                int mMonth = c.get(Calendar.MONTH);
                int mDay = c.get(Calendar.DAY_OF_MONTH);
                // Launch Date Picker Dialog
                DatePickerDialog dpd = new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year,
                                          int monthOfYear, int dayOfMonth) {
                        // Display Selected date in textbox
                        String temDate = "" + dayOfMonth;
                        if (temDate.length() == 1) {
                            temDate = "0" + temDate;
                        }
                        String temmonth = "" + (monthOfYear + 1);
                        if (temmonth.length() == 1) {
                            temmonth = "0" + temmonth;
                        }
                        String yr = "" + year;
                        //yr=yr.substring(2);
                        currentDate = year + temmonth + temDate;
                        date.setText(year + temmonth + temDate);
                    }
                }, mYear, mMonth, mDay);
                dpd.show();
            }
        });

        //-----------------time from and  to ---------------------------------
        fromtime.setTextIsSelectable(true);
        fromtime.setFocusable(false);
        fromtime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Calendar c = Calendar.getInstance();
                mHour = c.get(Calendar.HOUR_OF_DAY);
                mMinute = c.get(Calendar.MINUTE);

                // Launch Time Picker Dialog
                TimePickerDialog timePickerDialog = new TimePickerDialog(context,
                        new TimePickerDialog.OnTimeSetListener() {
                            @Override
                            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                                mHour = hourOfDay;
                                mMinute = minute;

                                String minutes = "" + minute;
                                if (minutes.length() == 1) {
                                    minutes = "0" + minutes;
                                }

                                String hourOfDays = "" + hourOfDay;
                                if (hourOfDays.length() == 1) {
                                    hourOfDays = "0" + hourOfDays;
                                }

                                fromtimes = hourOfDays + "" + minutes;
                                fromtime.setText(hourOfDays + "" + minutes);
                            }
                        }, mHour, mMinute, false);
                timePickerDialog.show();

            }
        });
        totime.setTextIsSelectable(true);
        totime.setFocusable(false);

        totime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Calendar c = Calendar.getInstance();
                mHour = c.get(Calendar.HOUR_OF_DAY);
                mMinute = c.get(Calendar.MINUTE);

                // Launch Time Picker Dialog
                TimePickerDialog timePickerDialog = new TimePickerDialog(context,
                        new TimePickerDialog.OnTimeSetListener() {
                            @Override
                            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                                mHour = hourOfDay;
                                mMinute = minute;

                                String minutes = "" + minute;
                                if (minutes.length() == 1) {
                                    minutes = "0" + minutes;
                                }

                                String hourOfDays = "" + hourOfDay;
                                if (hourOfDays.length() == 1) {
                                    hourOfDays = "0" + hourOfDays;
                                }

                                totimes = hourOfDays + "" + minutes;
                                totime.setText(hourOfDays + "" + minutes);
                            }
                        }, mHour, mMinute, false);
                timePickerDialog.show();

            }
        });

        //-------------------------------------------------------------------
        dialog = dialogbilder.create();
        dialog.show();
        dialog.setCancelable(false);
        dialog.setCanceledOnTouchOutside(false);
        Button btn_ok = mView.findViewById(R.id.btn_ok);
        ImageView close = mView.findViewById(R.id.close);
        close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
        btn_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    if (currentDate.length() == 0) {
                        new AlertDialogManager().showToast((Activity) context, "Please select tracking date");
                    } else if (fromtimes.length() == 0) {
                        new AlertDialogManager().showToast((Activity) context, "Please select tracking from time");
                    } else if (totimes.length() == 0) {
                        new AlertDialogManager().showToast((Activity) context, "Please select tracking to time");
                    } else {
                        dialog.dismiss();
                        new GetLiveHistory().execute();
                    }
                    //
                } catch (Exception e) {

                }
            }
        });
    }


    //------------------------click the button change the map speed--------------------------------------------
    public void speed1x(View v) {
        try {
            durationInMs = 2000;
            countDownInterval = 2000;
            Button btnRegister1 = findViewById(R.id.btnRegister1);
            btnRegister1.performClick();
        } catch (Exception e) {

        }
    }

    public void speed2x(View v) {
        try {

            durationInMs = 1000;
            countDownInterval = 1000;
            Button btnRegister1 = findViewById(R.id.btnRegister1);
            btnRegister1.performClick();
        } catch (Exception e) {

        }
    }

    public void speed4x(View v) {
        try {

            durationInMs = 700;
            countDownInterval = 700;
            Button btnRegister1 = findViewById(R.id.btnRegister1);
            btnRegister1.performClick();
        } catch (Exception e) {

        }
    }

    public void speed8x(View v) {
        try {
            durationInMs = 200;
            countDownInterval = 200;
            Button btnRegister1 = findViewById(R.id.btnRegister1);
            btnRegister1.performClick();
        } catch (Exception e) {

        }
    }
    //-----------------------------------------------------------------------------------------------------------


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        Location location = null;
        mMap.setBuildingsEnabled(true);
        //LatLng point=new LatLng();
        //point.latitude=lat;
        //point.longitude=lng;


        //mMap.setTrafficEnabled(true);
        //log.add("Google Map Instantiated.");
        mMap.getUiSettings().setMyLocationButtonEnabled(true);
        mMap.getUiSettings().setMyLocationButtonEnabled(true);

        //mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng point) {
                Log.d("Map", "Map clicked");
                //Toast.makeText(LiveTracking.this, "Click On map", Toast.LENGTH_SHORT).show();
                //new getVehicle().execute();
                //checkStatus();
            }
        });
        //mMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(HistoryTracking.this, R.raw.style_night_map));

        UiSettings uiSettings = googleMap.getUiSettings();
        //log.add("UI Setting Instantiated.");
        uiSettings.setMyLocationButtonEnabled(true);
        //log.add("my location enabled");
        uiSettings.setAllGesturesEnabled(true);
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
                new LatLng(26.4499, 80.3319), 12.0f));

    }

    private class GetLiveHistory extends AsyncTask _String, Integer, Void_ {
        String message;
        String Content;
        private ProgressDialog dialog = new ProgressDialog(context);


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog.setTitle(getString(R.string.app_name_language));
            //dialog.setIndeterminate(false);
            dialog.setMessage(getString(R.string.MSG_PLEASE_WAIT));
            dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            dialog.setProgress(0);
            dialog.show();
            //textView.setText("Verify details from server");
        }

        @Override
        protected Void doInBackground(String... params) {
            try {
                String url = APIUrl.SURVEY_URL1 + "/EmpLocationHistoryAnd";
                String imei = new GetDeviceImei(context).GetDeviceImeiNumber();
                HttpClient httpClient = new DefaultHttpClient();
                List_NameValuePair_ entity = new LinkedList_NameValuePair_();
                entity.add(new BasicNameValuePair("EmpID", USERCODE));
                entity.add(new BasicNameValuePair("DtFrom", currentDate + fromtimes));
                entity.add(new BasicNameValuePair("DtTo", currentDate + totimes));
                HttpPost httpPost = new HttpPost(url);
                httpPost.setHeader(HTTP.CONTENT_TYPE, "application/x-www-form-urlencoded");

                // for Header and Authothorization in  Basic Auth With user Name And Password
                httpPost.setHeader("X-ApiKey", "LsTrackingVib@1234");
                httpPost.setHeader("Authorization", "Basic " + Base64.encodeToString("LsDemo@45:LsAdmin@123".getBytes(), Base64.NO_WRAP));

                httpPost.setEntity(new UrlEncodedFormEntity(entity, "utf-8"));
                ResponseHandler responseHandler = new BasicResponseHandler();
                message = httpClient.execute(httpPost, responseHandler);
                System.out.println("sdfsdsd : " + message);
            } catch (SecurityException e) {
                Log.e("Exception", e.getMessage());
                message = e.getMessage();
                dialog.dismiss();
            } catch (Exception e) {
                Log.e("Exception", e.getMessage());
                message = e.getMessage();
                dialog.dismiss();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            try {
                dialog.dismiss();
                final Marker m;
                MarkerOptions a;
                JSONObject obj = new JSONObject(message);
                if (obj.getString("APISTATUS").equalsIgnoreCase("OK")) {
                    JSONArray jsonArray = obj.getJSONArray("DATA");
                    serverData = jsonArray;
                    //JSONObject jsonObject=jsonArray.getJSONObject(0);
                    //Toast.makeText(HistoryTracking.this,"----"+jsonObject.getString("lat"), Toast.LENGTH_LONG).show();
                    //latlng=new LatLng(Double.parseDouble(jsonObject.getString("lat")),Double.parseDouble(jsonObject.getString("lng")));
                    //latlng.latitude=Double.parseDouble(jsonObject.getString("lat"));
                    //list.add(latlng);
                    dataList = new ArrayList_HashMap_();
                    dataList.clear();
                    PolylineOptions options = new PolylineOptions().width(5).color(Color.BLUE).geodesic(true);
                    for (int z = 0; z < jsonArray.length(); z++) {
                        //LatLng point = list.get(z);
                        JSONObject jsonObject = jsonArray.getJSONObject(z);
                        LatLng l1 = new LatLng(jsonObject.getDouble("LAT"), jsonObject.getDouble("LNG"));
                        options.add(l1);
                    }
                    isStart = true;
                    mMap.addPolyline(options);
                    JSONObject jsonObject = jsonArray.getJSONObject(0);
                    LatLng l1 = new LatLng(jsonObject.getDouble("LAT"), jsonObject.getDouble("LNG"));
                    pline.add(l1);
                    //JSONObject j1 = jsonObject.getJSONObject("Tstamp");
                    Bitmap icon = getBitmapFromVectorDrawable(context, R.drawable.ic_baseline_person_pin_circle_24);
                    BitmapDescriptor iconImage = BitmapDescriptorFactory.fromBitmap(icon);
                    a = new MarkerOptions()
                            .position(new LatLng(lat, lng))
                            .icon(iconImage)
                            .title("Address : " + jsonObject.getString("ADDRESS"))
                            .snippet("Speed : " + jsonObject.getString("SPEED") + " Kms/Hour")
                            .anchor(0.5f, 0.5f)
                            .rotation(0)
                            .flat(true);

                    m = mMap.addMarker(a);
                    mMap.addPolyline(pline);
                    m.setPosition(new LatLng(jsonObject.getDouble("LAT"), jsonObject.getDouble("LNG")));
                    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
                            new LatLng(jsonObject.getDouble("LAT"), jsonObject.getDouble("LNG")), 16.0f));
                    currentAddress.setText(jsonObject.getString("ADDRESS") + "\nDate Time-" +
                            jsonObject.getString("CORDINATEDATE") + "\nSpeed - " +
                            jsonObject.getString("SPEED") + " Kms/Hour");
                } else {
                    new AlertDialogManager().RedDialog(context, obj.getString("MSG"));
                }

            } catch (Exception e) {
                dialog.dismiss();
                new AlertDialogManager().RedDialog(context, "Error:" + e.toString());
            }
        }
    }


    private void runPerson() {
        int status = (Integer) btn.getTag();
        if (status == 0) {
            runningVehicle();
        } else if (status == 1) {
            pauseVehicle();
        } else if (status == 2) {
            resumeVehicle();
        } else {
            finishTrip();
        }
    }

    public void startVehicle(View v) {
        runPerson();
    }

    private void runningVehicle() {

        long millisInFuture = 30000000; //30 seconds
        //long countDownInterval = 3000; //1 second
        btn.setTag(1);
        btn.setText("Pause");


        //Initialize a new CountDownTimer instance
        timer = new CountDownTimer(millisInFuture, countDownInterval) {
            public void onTick(long millisUntilFinished) {
                if (isPaused || isCanceled) {
                    cancel();
                } else {
                    mMap.clear();
                    if (i < serverData.length()) {
                        drawMarker(i);
                    } else {
                        mMap.addPolyline(pline);
                        Toast.makeText(context, "Finish....", Toast.LENGTH_SHORT).show();
                        isCanceled = true;
                        btn.setText("Finish ");
                        btn.setTag(10);
                    }

                    i++;
                    timeRemaining = millisUntilFinished;
                }

            }

            public void onFinish() {
                //Do something when count down finished
                Toast.makeText(context, "Finish....", Toast.LENGTH_SHORT).show();
            }
        }.start();
    }

    public void pauseVehicle() {
        isPaused = true;
        btn.setText("Resume");
        btn.setTag(2);

        Toast.makeText(context, "Person Paused....", Toast.LENGTH_SHORT).show();
    }

    public void finishTrip() {
        finish();
    }

    public void resumeVehicle() {
        isPaused = false;
        isCanceled = false;
        //countDownInterval = 2000;
        btn.setText("Pause");
        btn.setTag(1);
        //Initialize a new CountDownTimer instance
        long millisInFuture = timeRemaining;
        //long countDownInterval = 1000;
        timer = new CountDownTimer(millisInFuture, countDownInterval) {
            public void onTick(long millisUntilFinished) {
                //Do something in every tick
                if (isPaused || isCanceled) {
                    //If user requested to pause or cancel the count down timer
                    cancel();
                } else {
                    //btn.setText(""+i);
                    mMap.clear();
                    if (i < serverData.length()) {
                        drawMarker(i);
                    } else {
                        mMap.addPolyline(pline);
                        Toast.makeText(context, "Finish....", Toast.LENGTH_SHORT).show();
                        isCanceled = true;
                        btn.setText("Finish ");
                        btn.setTag(10);
                    }

                    i++;
                    //Put count down timer remaining time in a variable
                    timeRemaining = millisUntilFinished;
                }
            }

            public void onFinish() {
                //Do something when count down finished
                btn.setText("Task Completed");
                btn.setTag(10);
            }
        }.start();

    }


    private void animatevehicle(Double oldlat, Double oldlng, Double newlat, Double newlng, final Marker m) {

        final LatLng startPosition = new LatLng(oldlat, oldlng);
        final LatLng finalPosition = new LatLng(newlat, newlng);
        final Handler handler = new Handler();
        final long start = SystemClock.uptimeMillis();
        final Interpolator interpolator = new AccelerateDecelerateInterpolator();
        //final float durationInMs = 2000;
        final boolean hideMarker = false;

        handler.post(new Runnable() {
            long elapsed;
            float t;
            float v;

            @Override
            public void run() {
                // Calculate progress using interpolator
                elapsed = SystemClock.uptimeMillis() - start;
                t = elapsed / durationInMs;

                LatLng currentPosition = new LatLng(
                        startPosition.latitude * (1 - t) + finalPosition.latitude * t,
                        startPosition.longitude * (1 - t) + finalPosition.longitude * t);


                m.setPosition(currentPosition);


                // Repeat till progress is complete.
                if (t < 1) {
                    // Post again 16ms later.
                    handler.postDelayed(this, 20);
                } else {
                    if (hideMarker) {
                        m.setVisible(false);
                    } else {
                        m.setVisible(true);
                    }
                }
            }
        });
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
                new LatLng(newlat, newlng), 16.0f));
    }


    private void drawMarker(int i) {
        try {
            JSONObject json1 = serverData.getJSONObject(i);
            JSONObject json2 = serverData.getJSONObject(i + 1);
            //JSONObject j1=json2.getJSONObject("Tstamp");
            LatLng latLng = new LatLng(json2.getDouble("LAT"), json2.getDouble("LNG"));
            pline.add(latLng);
            //btn.setText(json1.getString("lat")+"----"+i+"----"+json2.getString("lat"));
            MarkerOptions a;

            final Marker m;
            {
                Bitmap icon = getBitmapFromVectorDrawable(context, R.drawable.ic_baseline_person_pin_circle_24);
                BitmapDescriptor iconImage = BitmapDescriptorFactory.fromBitmap(icon);
                a = new MarkerOptions()
                        .position(new LatLng(lat, lng))
                        .icon(iconImage)
                        .title("Address : " + json2.getString("ADDRESS"))
                        .snippet("Speed : " + json2.getString("SPEED"))
                        .anchor(0.5f, 0.5f)
                        .rotation(0)
                        .flat(true);
            }
            mMap.addPolyline(pline);
            currentAddress.setText(json2.getString("ADDRESS") + "\nDate Time-" +
                    json2.getString("CORDINATEDATE") + "\nSpeed - " +
                    json2.getString("SPEED") + " Kms/Hour");
            m = mMap.addMarker(a);
            animatevehicle(json1.getDouble("LAT"), json1.getDouble("LNG"),
                    json2.getDouble("LAT"), json2.getDouble("LNG"), m);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    Bitmap drawable_from_url(String url) throws java.net.MalformedURLException, IOException {

        HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
        connection.setRequestProperty("User-agent", "Mozilla/4.0");

        connection.connect();
        InputStream input = connection.getInputStream();

        return BitmapFactory.decodeStream(input);
    }

    public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
        Drawable drawable = ContextCompat.getDrawable(context, drawableId);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            drawable = (DrawableCompat.wrap(drawable)).mutate();
        }

        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
                drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);

        return bitmap;
    }
}



Post a Comment

0Comments
Post a Comment (0)