在地图视图标记之上添加信息窗口在不同的dpis中不相同

时间:2013-01-10 22:15:32

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

我正在使用此代码添加一个布局,该布局显示有关标记顶部标记的信息。虽然我在此代码中使用代码将像素转换为dpi。但它并没有看到不同的dpis相同的观点。

 protected override bool OnTap (int index)
    {
        if (!ShowPropertyFlag) {
            if (mapview .ChildCount > 0) {
                mapview .RemoveViewAt (0);
            }
            if (_items [index].Snippet == Boolean .FalseString) {
                InformationLayout iWindow = new InformationLayout 
            (mapview .Context, _Properties [_items [index].Title], sayActivity);

                GeoPoint p = _items [index].Point;

                MapView.LayoutParams _params = new MapView.LayoutParams
            (WindowManagerLayoutParams .WrapContent,
                   WindowManagerLayoutParams.WrapContent 
                     , p,-(int) Common .convertPixelsToDp    (13,sayActivity ),-(int) Common .convertPixelsToDp  (25,sayActivity ), 
                     MapView .LayoutParams .Bottom   );
                _params.Mode = MapView .LayoutParams .ModeMap;

                iWindow .Visibility = ViewStates .Visible;

                mapview .AddView (iWindow, _params);
                mapview .HasIWindows =true ;

            } else {
                Property[] m = _SubProperties [_items [index].Title];
                List <Property > templist= m.OfType <Property > () .ToList ();
                sayActivity .ListShow (templist ,m.Length );
            }

        }
            return base.OnTap (index);

    }

这是我在Common .convertPixelsToDp中用于将Pixel转换为Dp

的代码
    public static float convertPixelsToDp (float px, Context context)
    {
        return  px / ((float)context.Resources.DisplayMetrics.DensityDpi / 160f);
    }

我的标记宽x高是:25 x 45

因为我是新用户,所以我不能在不同的dpis中发布我的信息窗口和标记的图像。但我解释一下。在ldpi它似乎很好,并且很好(我通过尝试不同的数字并最终通过13和25得到修复它固定)但在hdpi信息窗口看起来关于标记的中心而不是标记的顶部。我不明白为什么?虽然我使用像素到dp转换器。

编辑:

也许链接有助于查看不同dpis中的图像:

hdpi:http://i.stack.imgur.com/K8vjO.png

ldpi:http://i.stack.imgur.com/sLH5o.png

1 个答案:

答案 0 :(得分:0)

请参阅链接:

MapView.LayoutParams

mapview.layoutparams中的x和y偏移必须基于px发送。 这意味着如果你甚至将它转换为dp,那么consructor也会认为它是px。 因此,最好的方法是使用标记的形式高度。 代码解决了问题。(location_Marker是地图中显示的标记):

MapView.LayoutParams _params = new MapView.LayoutParams
                    ( MapView .LayoutParams  .WrapContent,
                     MapView .LayoutParams  .WrapContent 
                     , p,0,
                     - sayActivity .Resources .GetDrawable (Resource .Drawable .location_Marker ).IntrinsicHeight , 
                     MapView .LayoutParams .Bottom   );