在画布上显示两个点A和B.

时间:2012-08-09 04:48:30

标签: java android android-canvas trigonometry

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

Latitude: 37.33774833333334
Longitude: -121.88670166666667

B点有这些值 -

Latitude: 37.336453
Longitude: -121.884985

我需要通过从圆心点进行某种计算,在Canvas上显示以上两点,如下图所示。以下是在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(); 
    } 


}

这是上面代码中Canvas的图像 - 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)。是否需要进行角度计算?我在Android项目的drawable文件夹中有两个点A and B的单独图像

1 个答案:

答案 0 :(得分:0)

最简单的方法是在OverlayItem中使用GeoPointMapViewhttps://developers.google.com/maps/documentation/android/hello-mapview。您可能最好将雷达设为OverlayItem