比如打开地图后,用户点击一点,然后就在那个点显示出一个图片或者绘制一个圆圈之类的,我用OnTap捕捉了坐标,但是绘制不了。
我顺便问一下:android的canvas一定要在OnDraw(Canvas canvas)这种类似的情况下使用吗,我能使用一个OnTouch(xxx),然后在这个函数里面用canvas吗?

解决方案 »

  1.   

    在线程的run方法里就可以啊!问题在于OnTouch里用它不好吧。
      

  2.   

    onTouch里可以通过调用invalidate()函数触发onDraw(), 实现绘制(绘制的参数可以在onTouch()里进行设置)
      

  3.   

    用canvas画上去,把坐标选logCat一下看对不对
      

  4.   

    那个不是用j2me的canvas搞的    overlayitempublic class GPS1Activity extends MapActivity {
    LocationManager lm;
    MapView mv;
    Location l;
    int lat,lon;
    Geocoder coder;
    GeoPoint point;
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            mv = (MapView) findViewById(R.id.mapview);
            mv.setBuiltInZoomControls(true);
            
            try {
    point = getLocation("深圳地王大厦");
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
            
            List<Overlay> mapViewList = mv.getOverlays();
            Drawable d = getResources().getDrawable(R.drawable.a);
            d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
            
            MyOverlayItem myItem = new MyOverlayItem(d);
            OverlayItem item = new OverlayItem(point, "", "");
            item.setMarker(d);
            myItem.additem(item);
            mapViewList.add(myItem);
            
            mv.getController().setZoom(16);
            mv.getController().animateTo(point);
        }
        
    @Override
    protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
    }

    private GeoPoint getLocation(String str) throws IOException
    {
    int lat,lon;
    coder = new Geocoder(this, Locale.getDefault());
    List<Address> list = coder.getFromLocationName(str, 1);
    if((list!=null)&&(list.size()>0))
    {
    Address a = list.get(0);
    lat = (int)(a.getLatitude()*1e6);
    lon = (int)(a.getLongitude()*1e6);
    }
    else
    {
    lat = (int)(22.55*1e6);
    lon = (int)(114.1*1e6);
    }

    return new GeoPoint(lat, lon);
    }

    class MyOverlayItem extends ItemizedOverlay<OverlayItem>
    {
    private List<OverlayItem> list = new ArrayList<OverlayItem>();
    public MyOverlayItem(Drawable defaultMarker) {
    super(defaultMarker);
    // TODO Auto-generated constructor stub
    }

    public void additem(OverlayItem item)
    {
    list.add(item);
    populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
    // TODO Auto-generated method stub
    return list.get(i);
    } @Override
    public int size() {
    // TODO Auto-generated method stub
    return list.size();
    }

    }
    }