หน้าเว็บ

วันจันทร์ที่ 2 เมษายน พ.ศ. 2555

วาดวงกลมบน google map android


อันนี้ผมเขียนเป็น class ไว้น่ะครับ
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.location.Location;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;

public class MapCircleUserMarker extends Overlay {
    private double latitude;
    private double longitude;

    private float radius_for_search_around;
    
    private final int TRANSPARENT_CIRCLE=25; //ค่าความโปร่งใส

    public MapCircleUserMarker() {
        this.radius_for_search_around = 100; //set default radius
    }
    
    public void setLatitudeLongtiudeRadiusSearchAround(Location L, float R){
        this.latitude=L.getLatitude();
        this.longitude=L.getLongitude();
        this.radius_for_search_around=R;
    }

    @Override
    public boolean draw(Canvas canvas, MapView mapview, boolean shadow, long when) {
        super.draw(canvas, mapview, shadow);

        Projection projection = mapview.getProjection();
        Point screenPts = new Point();
        GeoPoint gop = new GeoPoint((int) (this.latitude * 1e6), (int) (this.longitude * 1e6));
        projection.toPixels(gop, screenPts);

        float Lx = screenPts.x;
        float Ly = screenPts.y;

        Paint incircle = new Paint();
        incircle.setColor(Color.rgb(46, 154, 254));
        incircle.setAlpha(TRANSPARENT_CIRCLE);  //set ความโปร่งใส่ 25%
        incircle.setAntiAlias(true);
        incircle.setStyle(Paint.Style.FILL);
            
        Paint strokecircle = new Paint();
        float projectedRadius = projection.metersToEquatorPixels(radius_for_search_around);
        strokecircle.setColor(Color.rgb(46, 154, 254));
        strokecircle.setAlpha(100);
        strokecircle.setAntiAlias(true);
        strokecircle.setStyle(Paint.Style.STROKE);
        strokecircle.setStrokeWidth(2);
        
        Paint outcircle = new Paint();
        outcircle.setColor(Color.TRANSPARENT);
        outcircle.setAlpha(TRANSPARENT_CIRCLE - 5);  //set ความโปร่งใส่ 25 - 5 = 20%

        outcircle.setAntiAlias(true);
        outcircle.setStyle(Paint.Style.STROKE);
        outcircle.setStrokeWidth(projectedRadius * (float)0.15);

        canvas.drawCircle(Lx, Ly, projectedRadius * (float)1.12 , outcircle);
        canvas.drawCircle(Lx, Ly, projectedRadius, incircle);
        canvas.drawCircle(Lx, Ly, projectedRadius, strokecircle);
        return true;
    }
}

การเรียกใช้
MapView mapview = (MapView) findViewById(R.id.mapview);
flaot radius_search_around = 150;
RequestLocation requestl = new  RequestLocation((LocationManager) getSystemService(Context.LOCATION_SERVICE));
MapCircleUserMarker mapcircleusermarker = new MapCircleUserMarker();
mapcircleusermarker.setLatitudeLongtiudeRadiusSearchAround(
    requestl.getLocation(), 
    radius_search_around
);
List<Overlay> list = mapview.getOverlays();
list.clear();
list.add(mapcircleusermarker);
 
//class RequestLocation ผมได้เขียนเอาไว้แล้วน่ะครับในเรื่อง 
GeoCoding and RequestLocation google map android
http://na5cent.blogspot.com/2012/03/geocoding-and-requestlocation-google.html

1 ความคิดเห็น:

  1. ไม่ระบุชื่อ16 พฤษภาคม 2555 08:24

    ผมขอ Source code เต็มๆได้มั้ยอ่ะครับ ผมทดลองทำตามแล้วแต่ยังเข้าไปหน้าจอ Google map ไมได้เลยอ่ะครับ มันขึ้นเออเร่อตลอดเลย
    tue1991@hotmail.com

    ตอบลบ