我要在百度android地图上画1千多个点,全部画的话会很卡,所以要循环判断各点有没超出屏幕范围,大概代码如下:        for(int i=0;i<jarry.length();i++){
        
         try {
         if(Double.parseDouble(jarry.getJSONObject(i).getString("w"))<24.811905 && Double.parseDouble(jarry.getJSONObject(i).getString("j"))<113.594293)
         {
mMapView.getOverlays().add(new OverItemT(er, this,jarry.getJSONObject(i).getString("j"),jarry.getJSONObject(i).getString("w"),jarry.getJSONObject(i).getString("gjxname"),jarry.getJSONObject(i).getString("Content")));
         }
} catch (JSONException e) {
 //TODO Auto-generated catch block
e.printStackTrace();
}
       } 问题是怎么获取屏幕经纬范围,上面的数字是我自己写上去的,每个点怎么判断有没超出屏幕?求好心人提供代码,谢谢了

解决方案 »

  1.   

    楼上两位大哥,我用代码写了,发现还是很卡估计是画了1千个点,我怀疑我代码不对,能否帮我改 @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) { // Projection接口用于屏幕像素坐标和经纬度坐标之间的变换
    Projection projection = mapView.getProjection(); 
    int width=canvas.getWidth();//获取屏幕宽度
    int height=canvas.getHeight();//获取屏幕高度
    for (int index = size() - 1; index >= 0; index--) { // 遍历mGeoList
    OverlayItem overLayItem = getItem(index); // 得到给定索引的item String title = overLayItem.getTitle();
    // 把经纬度变换到相对于MapView左上角的屏幕像素坐标
    Point point = projection.toPixels(overLayItem.getPoint(), null); 
    if(point.x>0 && point.x<width && point.y>0 && point.y<height)//判断有没超出屏幕
    {
    // 可在此处添加您的绘制代码
    Paint paintText = new Paint();
    paintText.setColor(Color.BLACK);
    paintText.setTextSize(15);
    paintText.setTypeface(Typeface.DEFAULT_BOLD);
    canvas.drawText(title, point.x-30, point.y+10, paintText); // 绘制文本
    }
    } super.draw(canvas, mapView, shadow);
    //调整一个drawable边界,使得(0,0)是这个drawable底部最后一行中心的一个像素
    boundCenterBottom(er);
    }
      

  2.   

    你好,请问我这代码哪里错了吗?我这样写它还是很卡,估计是画了1千个点@Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {        // Projection接口用于屏幕像素坐标和经纬度坐标之间的变换
            Projection projection = mapView.getProjection(); 
            int width=canvas.getWidth();//获取屏幕宽度
            int height=canvas.getHeight();//获取屏幕高度
            for (int index = size() - 1; index >= 0; index--) { // 遍历mGeoList
                OverlayItem overLayItem = getItem(index); // 得到给定索引的item            String title = overLayItem.getTitle();
                // 把经纬度变换到相对于MapView左上角的屏幕像素坐标
                Point point = projection.toPixels(overLayItem.getPoint(), null); 
                if(point.x>0 && point.x<width && point.y>0 && point.y<height)//判断有没超出屏幕
                {
                // 可在此处添加您的绘制代码
                Paint paintText = new Paint();
                paintText.setColor(Color.BLACK);
                paintText.setTextSize(15);
                paintText.setTypeface(Typeface.DEFAULT_BOLD);
                canvas.drawText(title, point.x-30, point.y+10, paintText); // 绘制文本
                }
            }        super.draw(canvas, mapView, shadow);
            //调整一个drawable边界,使得(0,0)是这个drawable底部最后一行中心的一个像素
            boundCenterBottom(er);
        }
      

  3.   

    楼主, 来一个demo , , , , , , , , 
     路线查询
      

  4.   

    卡的原因应该是因为overlay实现类中的draw方法不断执行的原因,可以在draw里面开一个线程,这要考虑线程的使用问题啦,还有可能出现画面时隐时现的现象,之前有人说可以用双缓冲,可以向这方面想想。