Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在地图中设置标记,不带地图图像(自定义图像)_Android_Google Maps_Google Maps Markers - Fatal编程技术网

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

Android 在地图中设置标记,不带地图图像(自定义图像),android,google-maps,google-maps-markers,Android,Google Maps,Google Maps Markers,我正在开发一个雷达地图,所以它不是地图 我的想法是在不可见地图上设置标记,并设置以下图像,而不是传统地图: 因此,绿点是设置为LAT/LON的标记,但是你看不到地图,但是你可以看到图片 提前谢谢。你可以使用谷歌地图 实现googlemapssdk 用您的图片制作一个自定义的“MyPositionMarker” 添加一些标记 文件: 编辑:只需与用户一起计算标记的偏移量,而不使用地图,是不是很容易 编辑2: mMap = getMap(); mMap.setMapType(Go

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

我的想法是在不可见地图上设置标记,并设置以下图像,而不是传统地图:

因此,绿点是设置为LAT/LON的标记,但是你看不到地图,但是你可以看到图片


提前谢谢。

你可以使用谷歌地图

  • 实现googlemapssdk
  • 用您的图片制作一个自定义的“MyPositionMarker”
  • 添加一些标记
  • 文件:

    编辑:只需与用户一起计算标记的偏移量,而不使用地图,是不是很容易

    编辑2:

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

    其中mProvider是一个定制的tiles提供者。

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

    我的要求是在美国地图上画一条拉长的线

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

    这是我的自定义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;
        }
    }
    
    然后,您可以像这样向该图像视图添加点

    for ( int i = 0 ; i < appStatsLocations.size(); i++) {
            mMapAppStats.addPoint(Float.parseFloat(appStatsLocations.get(i).getLatitude()), Float.parseFloat(appStatsLocations.get(i).getLongitude()));
        }
    
    for(int i=0;i
    这里是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" />
    
    
    

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

    我想从地图开始,因此,immagine有一张地图,但它是不可见的。问题是:我不知道如何隐藏地图和设置图像。谢谢Kevinrob,这不是我想要的。通过这种方式,我隐藏了地图,但网格仍然存在,例如,我无法使用ImageView的所有属性设置“平铺”,但无论如何,谢谢:)是的,这是我所期望的。我一直在寻找计算所有坐标的方法,但我知道Android设备彼此之间有很大的不同,这太疯狂了。谢谢
    <...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" />