Open NoNews opened 7 years ago
Да это возможно сделать Вот пример кода CirclePolygon circle = new CirclePolygon(yMap.getMapController(), place.getLat(), place.getLng(), place.getDistance()); yMap.getMapController().getOverlayManager().addOverlay(circle);
public class CirclePolygon extends Overlay {
OverlayCircleItem overlayCircleItem;
Context mContext;
MapController mMapController;
CircleRender circleRender;
public CirclePolygon(MapController mapController, double lat, double lng, int radius) {
super(mapController);
mMapController = mapController;
mContext = mapController.getContext();
circleRender = new CircleRender();
setIRender(circleRender);
overlayCircleItem = new OverlayCircleItem(new GeoPoint(0, 0), mContext.getResources().getDrawable(R.drawable.icon));
for (float f = 0; f < 360; f++){
org.osmdroid.util.GeoPoint d = new org.osmdroid.util.GeoPoint(lat, lng).destinationPoint(radius, f);
overlayCircleItem.geoPoint.add(new GeoPoint(d.getLatitude(), d.getLongitude()));
}
addOverlayItem(overlayCircleItem);
}
@Override
public List<OverlayItem> prepareDraw() {
// TODO Auto-generated method stub
ArrayList<OverlayItem> draw = new ArrayList<OverlayItem>();
overlayCircleItem.screenPoint.clear();
for (GeoPoint point : overlayCircleItem.geoPoint) {
overlayCircleItem.screenPoint.add(mMapController.getScreenPoint(point));
}
draw.add(overlayCircleItem);
return draw;
}
}
public class CircleRender implements IRender {
@Override
public void draw(Canvas canvas, OverlayItem item_) {
// TODO Auto-generated method stub
Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setColor(ColorScheme.NowTheme.LightColor); //ТУТ НУЖНО ЗАДАТЬ ЦВЕТ ВОТ ТАК 0x55607d8b
mPaint.setStrokeWidth(100f);
OverlayCircleItem item = (OverlayCircleItem)item_;
Path p = new Path();
if (item.screenPoint != null && item.screenPoint.size() > 0)
{
ScreenPoint screenPoint = item.screenPoint.get(0);
p.moveTo(screenPoint.getX(), screenPoint.getY());
for (int i = 1; i<item.screenPoint.size(); i++ ){
screenPoint = item.screenPoint.get(i);
p.lineTo(screenPoint.getX(), screenPoint.getY());
}
canvas.drawPath(p, mPaint);
}
}
}
День добрый все это можно реализовать через Shape shape = new OvalShape(); ShapeDrawable drawable = new ShapeDrawable(shape);
И данный drawable передать в overlayItem.
А в методе getRectBounds() у overlayItem изменять размеры.
Здравствуйте. Возможно ли применить к overlayItem вот такую маску, как в текущем местоположении? +, с помощью анимации изменять её размеры?