Issue
Actually I am getting the latitude
and longitude
value from the ArrayList
, and I want to show these location on map in the interval of 3 seconds.
I have created a method named waitSec()
and I'm calling it in displayLocation()
but this is not working because this blocked the main thread so I used handler
and asynctask
and I found difficulties in this.
public void waitSec(){
long start = System.currentTimeMillis();
while(System.currentTimeMillis()<start+3000);
}
class MyAsyncTask extends AsyncTask<Integer,Integer,Void>{
@Override
protected Void doInBackground(Integer... integers) {
waitSec();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.e("TAG", "onPostExecute: we have waited 3 seconds" );
displayCurrentLocation();
}
}
private void displayCurrentLocation() {
for(int i=0;i<trackObjectList.size();i++){
//Log.e("TAG", "displayCurrentLocation: "+trackObjectList.get(i).getLatitude() );
if(trackObjectList.size()>0)
latLng = new LatLng(Double.parseDouble(trackObjectList.get(i).getLatitude())
,Double.parseDouble(trackObjectList.get(i).getLongitude()));
mMap.addMarker(new MarkerOptions().position(latLng)
.title("Here")
.icon(BitmapDescriptorFactory.fromBitmap(getSmallerSize(R.drawable.green_dot_th))));
mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,15f));
//waitSec();
}
}
I expected that after every 2-3 seconds the markers will add on google map but it is not adding in this interval. It shows all the latlng marks on google map.
Solution
You need to animate your marker when create--
private void animateMarker(final Marker marker) {
final Handler handler = new Handler();
final long startTime = SystemClock.uptimeMillis();
final long duration = 300; // ms
Projection proj = mMap.getProjection();
final LatLng markerLatLng = marker.getPosition();
Point startPoint = proj.toScreenLocation(markerLatLng);
startPoint.offset(0, -10);
final LatLng startLatLng = proj.fromScreenLocation(startPoint);
final Interpolator interpolator = new BounceInterpolator();
handler.post(new Runnable() {
@Override
public void run() {
long elapsed = SystemClock.uptimeMillis() - startTime;
float t = interpolator.getInterpolation((float) elapsed / duration);
double lng = t * markerLatLng.longitude + (1 - t) * startLatLng.longitude;
double lat = t * markerLatLng.latitude + (1 - t) * startLatLng.latitude;
marker.setPosition(new LatLng(lat, lng));
if (t < 1.0) {
// Post again 16ms later (60fps)
handler.postDelayed(this, 16);
}
}
});
}
Answered By - Hitesh Kushwah
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.