在地图中设置标记,不包含地图图像(自定义图像)

时间:2014-04-02 14:45:17

标签: android google-maps google-maps-markers

我正在开发一张雷达地图,所以它不是地图!

我的想法是在不可见的地图上设置标记,而不是经典地图,设置此图像:

enter image description here

因此,绿色点将是设置为LAT / LON的标记,但是您无法看到地图,但是您可以看到图片。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用Google地图。

  1. 实施Google Maps SDK
  2. 使用您的图片制作自定义“MyPositionMarker”
  3. 添加一些标记
  4. 之证件: https://developers.google.com/maps/documentation/android/

    编辑:可以很容易地计算标记与用户的偏移而不使用地图,不是吗?

    EDIT2:

        mMap = getMap();
        mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
        mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
    

    其中mProvider是自定义磁贴提供程序。

答案 1 :(得分:0)

我在我的一个项目中做过类似的事情。我创建了自定义ImageView,传递lat longs并在设置为ImageView的位图上绘制。

我的要求是在美国地图上绘制lat long。

因此,您可以创建一个自定义ImageView来保存您的雷达图像。并将lat long的列表传递给该类,以在雷达图像上绘制点。

这是我的自定义ImageView类。

    public class MapImageView extends ImageView{
    private float latitudeTop, latitudeBottom, longitudeRight, longitudeLeft;
    private List<Float> points = new ArrayList<Float>();
    private Paint pointPaint;
    private Matrix pointMatrix = new Matrix();

    public MapImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        pointPaint = new Paint();
        pointPaint.setAntiAlias(true);
        pointPaint.setStrokeCap(Cap.ROUND);
        pointPaint.setColor(Color.WHITE);
        pointPaint.setStrokeWidth(2.5f);
    }

    public void setBounds(float latitudeTop, float latitudeBottom, float longitudeLeft, float longitudeRight) {
        this.latitudeTop    = latitudeTop;
        this.latitudeBottom = latitudeBottom;
        this.longitudeLeft  = longitudeLeft;
        this.longitudeRight = longitudeRight;
    }

    public void addPoint(float latitude, float longitude) {
        points.add(longitude);
        points.add(latitude);
        invalidate();
    }

    public void setPoints(List<Float> points){
        this.points = points;
        LogMsg.d("PP GOT "+this.points.size());
        invalidate();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        
        LogMsg.d("Image: -latitude: "+latitudeTop+" longitude: "+longitudeLeft);
        LogMsg.d("width: "+getMeasuredWidth()/(longitudeRight-longitudeLeft)+" Height: "+getMeasuredHeight()/(latitudeBottom-latitudeTop));
        pointMatrix.reset();
        pointMatrix.postTranslate(-longitudeLeft, -latitudeTop);
        pointMatrix.postScale(getMeasuredWidth()/(longitudeRight-longitudeLeft),getMeasuredHeight()/(latitudeBottom-latitudeTop));
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPoints(mapPoints(), pointPaint);
    }

    private float[] mapPoints() {
        float[] pts = new float[points.size()];
        for (int i = 0; i < points.size(); i++) {
            pts[i] = points.get(i);
        }
        pointMatrix.mapPoints(pts);
        return pts;
    }
}

这里的设置是从onCreate()绑定的,设置bound实际上是美国地图的纬度和长度。

mMapAppStats.setBounds(49.066668f, 25.482951f, -124.962159f, -65.932619f);

然后你可以像这样在这个图像视图中添加点。

for ( int i = 0 ; i < appStatsLocations.size(); i++) {
        mMapAppStats.addPoint(Float.parseFloat(appStatsLocations.get(i).getLatitude()), Float.parseFloat(appStatsLocations.get(i).getLongitude()));
    }

这是XML。

<...MapImageView
            android:id="@+id/mapAppStats"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btnAppStatsViewTeamNFriends"
            android:scaleType="fitXY"
            android:src="@drawable/usmapnew" />

你可以从中得到一些解决问题的想法。