I am new to android and i've just been looking into the canvas API. I currently have an activity class called "MyMap" and a ViewClass called "MapView" (which extends view).
The MyMap activity sets the content view to MapView and inside MapView I am creating a canvas with a bitmap image of a Map and I am then drawing a circ开发者_StackOverflow社区le on the map based on the current GPS coordinates of the mobile. I want to know how do I perform some callback to the draw() method whenever the gps coordinates change? also will this code go in MyMap activity or in the MapView?
What you need to do is first setup a gps listener and respond to that, you can find information about that here LocationManager
It would look something like this. Keep in mind that GPS sucks battery, there are ways to do this better but here is the meat of it, more or less
Once you have that setup just do what you need to do in the onLocationChanged listener
CODE SNIPPET - NOT COMPLETE
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);
}
Painting the circle - you will need to determine the positioning and radius
@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);
}
精彩评论