1

지도에 아이콘이 표시되어있는 한 아이콘을 그려야합니다. 나는 거의 다 왔다고 생각한다. 다음은 코드입니다.지도에 그림 아이콘이 표시되어 있습니다.

package com.example.googledemo4; 

import java.util.List; 

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.Overlay; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.Toast; 
import android.support.v4.app.NavUtils; 

public class GoogleDemo4 extends MapActivity{ 

MapController mc; 
MapView mapView; 
GeoPoint g; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_google_demo4); 

    mapView=(MapView) findViewById(R.id.MapView); 
    mapView.setBuiltInZoomControls(true); 


    mc=mapView.getController(); 

    List<Overlay> overlays = mapView.getOverlays(); 

    GeoPoint geoPoint = new GeoPoint(18533000,73850000); 


    MapOverlay4 mapOverlay = new MapOverlay4(geoPoint,mapView,this); 

    overlays.add(mapOverlay); 

    mc.animateTo(geoPoint); 
    mc.setZoom(17); 
    geoPoint=g; 
    mapView.setOnTouchListener(touch); 

    mapView.postInvalidate(); 
    } 

private OnTouchListener touch = new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     // TODO Auto-generated method stub 

     mapView=(MapView) findViewById(R.id.MapView); 

     if (event.getAction() == 1) {     
      GeoPoint geoPoint = mapView.getProjection().fromPixels(
       (int) event.getX(), 
       (int) event.getY()); 
      g=geoPoint; 
       Toast.makeText(getBaseContext(), 
        geoPoint.getLatitudeE6()/1E6 + "," + 
        geoPoint.getLongitudeE6() /1E6 , 
        Toast.LENGTH_SHORT).show(); 

     } 

     return true; 
    } 
}; 

@Override 
protected boolean isRouteDisplayed() { 
    // TODO Auto-generated method stub 
    return false; 
} 


} 

그리고 사용자 정의 오버레이 생성 : 나는 약간의 위도와 길이에 GeoPoint의 초기화 때문에

package com.example.googledemo4; 


import android.content.Context; 
import android.content.res.Resources; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Point; 
import android.webkit.WebView.FindListener; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 

public class MapOverlay4 extends Overlay{ 

GeoPoint p ; 
MapView mapView; 
Context context; 

public MapOverlay4(GeoPoint geoPoint, MapView mapView, Context context){ 

    this.mapView=mapView; 
    this.p=geoPoint; 
    this.context=context; 
} 
public void draw(Canvas canvas, MapView mapView, boolean flag) { 
    // TODO Auto-generated method stub 
    super.draw(canvas, mapView, flag); 
     //---translate the GeoPoint to screen pixels--- 
    mapView=this.mapView; 
    Point screenPts = new Point(); 
    mapView.getProjection().toPixels(p, screenPts); 

    //---add the marker--- 
    Bitmap bmp = BitmapFactory.decodeResource(
     this.context.getResources(), R.drawable.ic_launcher);    
    canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);   


} 


} 

이 코드는 처음에 아이콘을 그립니다합니다. 그러나지도가 만져지면 아무 일도 일어나지 않습니다. 지도가 지포 포인트를 터치 할 때마다 변경된 지오 포인트가 오버레이에 제공 될 때마다 나는 생각했습니다.

안부

답변

0

onTouchListener 내의 새로운 지오 포인트를 오버레이 .add (mapOverlay)와 비슷한 호출이 없습니다. 그렇게하는 것이 내가 생각하는 데 도움이 될 것입니다.

+0

효과가있었습니다. 고맙습니다. – tsogtoo

+0

위대한 당신이 그것을 정렬! – Gridtestmail

0

시도 이미지 을 그릴 itemized overlay를 사용하고 특정 지점에서 그립니다 OntouchEvent 방법을 무시하고 그것을 위도 긴을 통과하고 당신은 몇 가지 예를 들어 U 필요한 경우에는 접촉 위치 에 이미지를 얻을 것이다 볼 수 있습니다 here

관련 문제