如何将给定的纬度和经度标记为静止图像映射

时间:2011-09-06 09:45:42

标签: android android-imageview

@Dan S,在这篇文章中给出了以下声明 - > display a still image map

  

然后使用第二个ImageView(用于指示器)将其绘制在顶部和   将它移动到屏幕上的正确位置,并确保   此视图中的背景是透明的以及背景   你的指标

如何为指标创建第二个ImageView?它应该是透明的imageview以及指标图像。

更新 我在这里询问如何重叠我的图像映射ImageView和透明指示器ImageView以标记当前位置。

1 个答案:

答案 0 :(得分:1)

默认情况下,ImageView是透明的。 您的指标图像资源应具有透明背景(例如透明.PNG图像)。

只需将ImageView的imageResource或backgroundResource设置为PNG文件。

因此,您创建ImageView的代码将是这样的:

ImageView myImageView = new ImageView(context);
myImageView.setBackgroundColor(0x0); // not needed - it's the default
myImageView.setImageResource(R.drawable.indicator_icon);

但同样,这是默认设置,您仍然需要确保图像的背景是透明的,否则ImageView的背景无关紧要。

更新:关注@eros更新问题,这是一个更新的答案: 我能想到有两个选项可以实现将一个imageview定位在另一个上面:

  1. 使用LayoutParams并将边距设置为指标imageview
  2. 的位置
  3. 在地图bmp的画布
  4. 上绘制指标imageview

    我个人更喜欢第一个选项,因为未来的更改不会强迫您重新绘制指标。

    这是一个演示选项(1)的课程:

    public class MyMapView extends RelativeLayout {
        private ImageView mBackImageView;
        private ImageView mIndicatorImageView;
    
        public MyMapView(Context context) {
            super(context);
    
            mBackImageView = new ImageView(context);
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
            mBackImageView.setImageResource(R.drawable.image1);
            mBackImageView.setScaleType(ImageView.ScaleType.FIT_XY);
            addView(mBackImageView, params);
    
            mIndicatorImageView = new ImageView(context);
            RelativeLayout.LayoutParams indParams = new RelativeLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            mIndicatorImageView.setImageResource(R.drawable.image2);
            addView(mIndicatorImageView, indParams);
        }
    
        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            super.onLayout(changed, l, t, r, b);
            centerIndicatorPosition();
        }
    
        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            super.onSizeChanged(w, h, oldw, oldh);
            centerIndicatorPosition();
        }
    
        // @eros: this's the part you want. this method just centers the indicator view
        // but if you have the relative position like you say, use it for the margins
        private void centerIndicatorPosition() {
            int xPos = (getMeasuredWidth() - mIndicatorImageView.getMeasuredWidth()) / 2;
            int yPos = (getMeasuredHeight() - mIndicatorImageView.getMeasuredHeight()) / 2;
            ((RelativeLayout.LayoutParams)mIndicatorImageView.getLayoutParams())
                .setMargins(xPos, yPos, 0, 0);
        }
    }