使用搜索栏进度动态更改分项叠加绘制圆

时间:2013-01-08 08:07:47

标签: android google-maps draw itemizedoverlay

我使用地图制作应用程序。我使用逐项叠加在特定点上绘制圆圈 它工作得很好。但我想用搜索栏进度值更改该圆的半径。任何人都可以指导我这个 提前致谢。

2 个答案:

答案 0 :(得分:1)

使用on map绘制圆圈我们必须使用itemozied Overlay但是要使用Seek Bar的Progress进行更改我们需要执行以下可以使用Seek Bar的内容以及如果您想使用设置缩放级别搜索栏它在以下代码片段中处理

注意:我使用的搜索栏的最小值为0,最大值为9

   public void seekBarProgressEvent()
    {
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub


            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                // TODO Auto-generated method stub
                mapView.getOverlays().clear();

                if(progress==0)
                {
                    zoomLevel=17f;



                }
                else if(progress==1)
                {
                    zoomLevel=16f;



                }
                else if(progress==2)
                {
                    zoomLevel=15f;



                }
                else if(progress==3)
                {
                    zoomLevel=14f;



                }
                else if(progress==4)
                {
                    zoomLevel=14f;



                }
                else if(progress==5)
                {
                    zoomLevel=13.50f;



                }
                else if(progress==6)
                {
                    zoomLevel=13.10f;


                }
                else if(progress==7)
                {
                    zoomLevel=12.85f;


                }
                else if(progress==8)
                {
                    zoomLevel=12.10f;


                }
                else if(progress==9)
                {
                    zoomLevel=11.85f;

                }
                //intent.putExtra("radius", radius);
                //zoomLevel-=seekBar.getProgress();
                Log.i("ZoomLevel", ""+zoomLevel);
                mapView.getController().setZoom((int)zoomLevel);
                Drawable drawable = getApplicationContext().getResources().getDrawable(R.drawable.mapmarker);
// in Itemized overlay i m drawing circle of  Defined Radius like 100m 200m 300m etc
                itemizedoverlay = new FolloowMapOverlay(drawable, getApplicationContext(),(radius));
                MapPoint = new GeoPoint((int)(mylat*1E6), (int)(mylon*1E6));
                OverlayItem overlayitem = new OverlayItem(MapPoint, "Current Location", "");
                currentLocationOverlay = new CurrentLocationOverlay(drawable, getApplicationContext());
                currentLocationOverlay.addOverlay(overlayitem);        
                mapView.getOverlays().add(itemizedoverlay);  
                mapView.getOverlays().add(currentLocationOverlay);  
                mapView.invalidate();
                mapController.setCenter(MapPoint);
                mapController.animateTo(MapPoint);
            }
        });

    }

以下是我的逐项覆盖类

中的绘制圆方法
 private void drawCircleAtPoint(GeoPoint point, Canvas canvas, MapView mapView) {

        Projection projection = mapView.getProjection();        
        Point pt2 = new Point();
        projection.toPixels(point, pt2);
// method that is used to conver the radius to pixel that takes input the radius and draw it on the coresponding pixels 
        float circleRadius = projection.metersToEquatorPixels(radius) * (1/ FloatMath.cos((float) Math.toRadians(MapController.mylat)));
        Paint circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        Paint rectangle=new Paint(Paint.ANTI_ALIAS_FLAG);
        Log.d("Circular Radius", ""+circleRadius+"             "+radius);

        circlePaint.setColor(0x99000000);
        circlePaint.setStyle(Style.STROKE);
        canvas.drawCircle((float)pt2.x, (float)pt2.y, circleRadius, circlePaint);




    }

答案 1 :(得分:1)

我介绍了Google提供的一个很好的示例和教程,这是一个Android官方指南。

首先,访问this site in the Google Dev guide

其次,请在HERE in Google Dev guide获取上述指南中提供的示例代码。

第三步,在上面的示例代码的src /目录中找到“PolylineDemoActivity.java”。 我想那就是你想知道的。

您可以使用搜索栏进度值〜!

更改圆的半径

You can change the radius of the circle

如需了解更多信息,请与我联系。