代码之家  ›  专栏  ›  技术社区  ›  AKIWEB

在画布上显示两点A和B

  •  1
  • AKIWEB  · 技术社区  · 13 年前

    我需要在我在Android中使用Canvas创建的雷达圆圈图像上显示以下两点(A和B)。这两点有经度和纬度值。假设点A具有以下值-

    Latitude: 37.33774833333334
    Longitude: -121.88670166666667
    

    点B具有这些值-

    Latitude: 37.336453
    Longitude: -121.884985
    

    我需要在画布上显示上面的两个点,从圆的中心点进行一些计算,如下图所示。下面是在Android中创建雷达圈的代码,如下所示-

    public class CircleCanvas extends View{
    
        Context context;
        int[] imageNames=new int[6];
    
        public CircleCanvas(Context mContext,int mUser,int mfirstDis,int msecondDis,int mthirdDis,int mfourDis,int bgMap) {
            super(mContext);
            context = mContext;
            imageNames[0]=mUser;
            imageNames[1]=mfirstDis;
            imageNames[2]=msecondDis;
            imageNames[3]=mthirdDis;
            imageNames[4]=mfourDis;
            imageNames[5]=bgMap;
        }
        protected void onDraw(Canvas canvas) { 
            super.onDraw(canvas); 
            Paint p = new Paint(); 
            p.setColor(Color.BLACK); //BLACK 
            p.setStyle(Style.STROKE);
            //canvas.drawColor(Color.BLACK); //WHITE
    
            WindowManager mWinMgr = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
            @SuppressWarnings("deprecation")
            int displayWidth = mWinMgr.getDefaultDisplay().getWidth();
            @SuppressWarnings("deprecation")
            int displayHeight = mWinMgr.getDefaultDisplay().getHeight();
    
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),imageNames[5]), 0, 0, null);
    
            int totalCircle=4;
            int radius=40;
            int centerimagesize=13;
    
            for (int i = 1; i <= totalCircle; i ++) { 
                canvas.drawCircle(displayWidth/2,displayHeight/4, i*radius, p); 
                canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),imageNames[i]), ((displayWidth/2)+(i*radius)),(displayHeight/4), null);
            } 
    
            canvas.drawLine((displayWidth/2-(totalCircle*radius)), (displayHeight/4), (displayWidth/2+(totalCircle*radius)), (displayHeight/4), p);
            canvas.drawLine((displayWidth/2), (displayHeight/4-(totalCircle*radius)), (displayWidth/2), (displayHeight/totalCircle+(4*radius)), p);
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),imageNames[0]), ((displayWidth/2)-(centerimagesize/2)),((displayHeight/4)-(centerimagesize/2)), null);
    
            invalidate(); 
        } 
    
    
    }
    

    这是上面代码中画布的图像- enter image description here

    我正在传递我目前在画布上显示的所有图像 onCreate 方法

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
        CircleCanvas circleCanvas=new CircleCanvas(this,R.drawable.current_user,R.drawable.tenm,R.drawable.twentym,R.drawable.thirtym,R.drawable.fourtym,R.drawable.bg_map);
        main.addView(circleCanvas);
    
       locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
       locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
                MINIMUM_TIME_BETWEEN_UPDATES,
                MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
                new MyLocationListener()
        ); 
    }
    

    我不确定,如何通过从我使用Canvas创建的圆的中心点进行计算来显示雷达圆图像上的两个点(A和B)。是否需要进行一些角度计算?我有两个点的单独图像 A and B 在我的Android项目中的可绘制文件夹中

    1 回复  |  直到 13 年前
        1
  •  0
  •   techi.services    13 年前

    最简单的方法是使用 OverlayItem GeoPoint MapView https://developers.google.com/maps/documentation/android/hello-mapview .你最好把雷达对准 套印格式项目