Android Canvas - обратные вызовы, чтобы нарисовать точку и переместить ее на основе движения GPS - PullRequest
1 голос
/ 10 июля 2011

Я новичок в Android, и я только что посмотрел на API холста.В настоящее время у меня есть класс активности под названием «MyMap» и ViewClass под названием «MapView» (который расширяет представление).

Операция MyMap устанавливает представление содержимого в MapView, а внутри MapView я создаю холст с растровым изображением карты, а затем рисую круг на карте на основе текущих координат GPS мобильного устройства.Я хочу знать, как выполнить обратный вызов метода draw () всякий раз, когда меняются координаты GPS?также этот код будет идти в деятельности MyMap или в MapView?

1 Ответ

0 голосов
/ 10 июля 2011

Что вам нужно сделать, это сначала настроить слушатель GPS и ответить на него, вы можете найти информацию об этом здесь LocationManager

Это будет выглядеть примерно так.Имейте в виду, что GPS разряжает батарею, есть способы сделать это лучше, но вот суть этого, более или менее

Как только вы настроите эту настройку, просто сделайте то, что вам нужно сделать, в слушателе onLocationChanged

КОД SNIPPET - НЕ ЗАВЕРШЕН

import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;

public class gps extends Activity  {

    private LocationManager locManager = null; 

        public void onCreate(Bundle state) {
           super.onCreate(state);

           locManager = (LocationManager)App.getSystemService(Context.LOCATION_SERVICE);
        }

        LocationListener onLocationChange=new LocationListener() {
        public void onLocationChanged(Location loc) {

                  // DO SOMETHING HERE with the updated location information to change your map

            }
        }

        public onResume() {
             startGPS(1000,1); // Every second or when we move 1 meter
        }

        public onPause() {
             stopGPS(); 
        }

        private boolean startGPS(long interval, float meterTrigger)
    {

        if (!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
            return false; 



                            locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,interval,meterTrigger,onLocationChange);



                return true;
        }

        public void stopGPS() {
       locManager.removeUpdates(onLocationChange); 
    }

Рисование круга - вам нужно будет определить положение и радиус

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    float x = 0;
    float y = 0;
    float r = 0; 

    paint = new Paint(Paint.ANTI_ALIAS_FLAG); // You can cache this higher up and reuse it 
    paint.setColor(0xFFFF0000);  
    canvas.drawCircle(x, y, r, paint);
}
...