как поставить маркер на карте, когда местоположение меняется в Android - PullRequest
1 голос
/ 19 апреля 2011
package com.android.gps;

import java.util.List;

import com.android.gps.hellogps.MyLocation.MapOverlay;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MapView.LayoutParams;
import com.google.android.maps.Overlay;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;

public class hellogps extends MapActivity {
    /** Called when the activity is first created. */
    MapView mapView; 
    MapController mc;
    GeoPoint p;
    LocationManager locationManager;
    hellogps x;
    MapOverlay mapOverlay;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mapView = (MapView) findViewById(R.id.mapView);
        LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.linear);  
        View zoomView = mapView.getZoomControls(); 

        zoomLayout.addView(zoomView, 
            new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, 
                LayoutParams.WRAP_CONTENT)); 
        mapView.displayZoomControls(true);

        mc = mapView.getController();
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener mlocListener = new MyLocation(); 


        locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 1000, 10f, mlocListener);





    }



    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
public class MyLocation implements LocationListener
{

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

        int lat = (int) (location.getLatitude() * 1E6);
        int lng = (int) (location.getLongitude() * 1E6);



        GeoPoint p = new GeoPoint(lat, lng);

         mc.setZoom(17);
            mc.animateTo(p);
          List<Overlay> listOfOverlays = mapView.getOverlays();
            listOfOverlays.clear();
            listOfOverlays.add(mapOverlay);        

            mapView.invalidate();


         mapView.invalidate();

    }
       class MapOverlay extends com.google.android.maps.Overlay
        {
           MapOverlay mapOverlay=new MapOverlay();

            @Override
            public boolean draw(Canvas canvas, MapView mapView, 
            boolean shadow, long when) 
            {
                super.draw(canvas, mapView, shadow);                   

                //---translate the GeoPoint to screen pixels---
                Point screenPts = new Point();
                mapView.getProjection().toPixels(p, screenPts);

                //---add the marker---
                Bitmap bmp = BitmapFactory.decodeResource(
                    getResources(), R.drawable.push_pin);            
                canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);         
                return true;
            }
        } 

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }}}

Я новичок в Android, делающий мой проект Colege Когда я запускаю свое приложение, оно работает нормально, но когда я отправляю координаты местоположения через телнет, появляется синий экран и там нет метки Пожалуйста, помогите мне

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

В вашем классе MyLocation в методе onLocationChanged вы должны написать вместо GeoPoint p = new GeoPoint(lat, lon); try p = new GeoPoint(lat, lon);. В вашем коде вы создали новую переменную с именем p (аналогично глобальной переменной), а ваша локальная переменная указывает на объект. Где ваша локальная переменная p ни на что не указывает (= null). Потому что вы используете глобальную переменную p в Draw и имеет значение null.

1 голос
/ 19 апреля 2011

Если вы просто хотите показать текущее местоположение пользователя на карте, возможно, будет проще использовать встроенный класс MyLocationOverlay.

Используйте следующее в onCreate ():

        MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView);
        mapView.getOverlays().add(myLocationOverlay);
        myLocationOverlay.enableCompass(); // if you want to display a compass also
        myLocationOverlay.enableMyLocation();

Это покажет текущее местоположение пользователей и их обновление по мере их перемещения.Это не отслеживает, хотя, где пользователь был.(Я не уверен, что это то, что вы пытаетесь выполнить, или просто отображаете текущее местоположение.)

...