android - 如何在android中更改位置时在 map 上放置标记

标签 android google-maps android-emulator

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 的新手,正在做我的大学项目 当我运行我的应用程序时它工作正常但是 当我通过 telnet 发送位置坐标时,出现蓝屏并且没有标记 请帮助我

最佳答案

onLocationChanged 方法中的 MyLocation 类中,您应该编写 GeoPoint p = new GeoPoint(lat, lon); 尝试 >p = new GeoPoint(lat, lon);。在您的代码中,您创建了名为 p 的新变量(与全局变量相同)并且您的局部变量指向对象。你的局部变量 p 没有指向任何东西(= null)。因为您在绘图中使用了全局变量 p 并设置为 null。

关于android - 如何在android中更改位置时在 map 上放置标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5721031/

相关文章:

android - 在图库中找不到图像

java - Android - 未处理的 java.net.MalformedURLException

java - android中的可点击小部件

Android 相对布局和不同的屏幕尺寸/设备

android - 如何在 linux 操作系统中关闭 avd

android-studio - 从 Android Studio 在模拟器上截取屏幕截图

Android EditText 只接受 2 个值

javascript - 谷歌地图顶部的路线多边形

javascript - 关闭 InfoWindow - 关闭 onclick - Google map

javascript - Google Maps API - 获取属性(property)边界数据