2016-09-25 2 views
1

Я сделал приложение, в котором местоположение пользователя выбирается через каждые 10 секунд после нажатия кнопки запуска, а полилиния рисуется от старого к новому местоположению до тех пор, пока кнопка остановки не будет нажат. теперь проблема в том, что код полилинии находится внутри функции запуска, на карте нет линии. но если я поместил этот код вне функции запуска, он работает нормально (например, когда я снова нажимаю кнопку запуска, я получаю полилинию), но я не хочу нажимать кнопку каждый раз, я хочу, чтобы эта строка была используя собственный таймер.Нарисуйте полилинию каждые 10 секунд на карте google в andriod

вот мой код

track_record.setOnClickListener(new View.OnClickListener() { 
              @Override 
              public void onClick(View v) { 
               Toast.makeText(getApplication(), "Your Tracking is started now", Toast.LENGTH_SHORT).show(); 
               ///////*************************************//////// 
               // create class object 
               gps = new GPSTracker(MapsActivity.this); 
               timer.scheduleAtFixedRate(new TimerTask() { 

                @SuppressLint("DefaultLocale") 
                @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
                @Override 

                public void run() { 
                 runOnUiThread(new Runnable() { 
                  @Override 
                  public void run() { 

                   LatLng current = new LatLng(latitude = gps.getLatitude(),longitude = gps.getLongitude()); 

                   if (begin == 0) { 
                   fixedBegin = current; 

                    // create marker 
                    MarkerOptions marker = new MarkerOptions().position(fixedBegin).title("Begin "); 

                    // Changing the color babyyy 
                    marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); 
                    // adding marker 
                   mMap.addMarker(marker); 


                    // Not working here, but should be 

                    if(Flag==0) //when the first update comes, we have no previous points,hence this 
                    { 
                     prev=current; 
                     Flag=1; 
                    } 
                    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(current, 16); 
                    mMap.animateCamera(update); 
                    mMap.addPolyline((new PolylineOptions()) 
                      .add(prev, current).width(6).color(Color.BLUE) 
                      .visible(true)); 
                    prev=current; 
                    current = null; 

                   } 
                   begin++; 

                   Log.i("OK", "lat------ " + latitude); 
                   Log.i("OK", "lng-------- " + longitude); 

                   arrLat.add(latitude); 
                   arrLng.add(longitude); 

                   //////////// TRYING /////////// 
                   // And it Worked here 

/* 
                   if(Flag==0) //when the first update comes, we have no previous points,hence this 
                   { 
                    prev=current; 
                    Flag=1; 
                   } 
                   CameraUpdate update = CameraUpdateFactory.newLatLngZoom(current, 16); 
                   mMap.animateCamera(update); 
                   mMap.addPolyline((new PolylineOptions()) 
                     .add(prev, current).width(6).color(Color.BLUE) 
                     .visible(true)); 
                   prev=current; 
                   current = null; 
*/ 


                  } 
                 }); 


                } 
               }, 0, TIME_INTERVAL); 


               // check if GPS enabled 
               if (gps.canGetLocation()) { 

                latitude = gps.getLatitude(); 
                longitude = gps.getLongitude(); 
                String longlat = String.valueOf(latitude) + ":" + String.valueOf(longitude); 
                cordsList.add(longlat); 
                // \n is for new line 
                Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); 
               } else { 
                Toast.makeText(getApplicationContext(), "Sorry cant get location", Toast.LENGTH_LONG).show(); 
                // can't get location 
                // GPS or Network is not enabled 
                // Ask user to enable GPS/network in settings 
                // gps.showSettingsAlert(); 
               } 

               Log.i("Finall", "Location-> " + cordsList.toString()); 

              } 
             } 
     ); 

ответ

1

Вы можете использовать обработчик для этой цели.

переменные класса.

Handler m_handler; 
Runnable m_handlerTask ; 
int t=0; 

Используйте обработчику с задержкой 10 секунд, чтобы полилинии с помощью широты и долго

m_handler = new Handler(); 
m_handlerTask = new Runnable() 
{ 
@Override 
public void run() { 
if(t<listPoint.size()-1) 
{  
LatLng src = listPoint.get(t); 
LatLng dest = listPoint.get(t + 1); 
Polyline line = mMap.addPolyline(new PolylineOptions() 
    .add(new LatLng(src.latitude, src.longitude), 
    new LatLng(dest.latitude,dest.longitude))          
    .width(2).color(Color.BLUE).geodesic(true)); 
    t++; 
    } 
    else 
    { 
    m_handler.removeCallbacks(m_handlerTask); 
    } 
    m_handler.postDelayed(m_handlerTask, 10000);  
    } 
}; 
m_handlerTask.run(); 
+0

: откуда я получаю 'listpoint? –

+0

Мы рассматриваем listPoint список широт и долгот. – Singh

+0

правый. можете ли вы указать, где я должен положить этот код обработчика? как внутри меня запускает функция или только внутри кнопки? –