0

このコードを使用して、マーカーに関する情報をマーカーの上に表示するレイアウトを追加しています。このコードでは、コードを使用してピクセルをdpiに変換しました。ただし、異なるdpiの同じビューでは表示されません。

 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

私は新しいユーザーなので、情報ウィンドウとマーカーの画像を異なるdpiで投稿することはできませんが、説明します。ldpiではそれは良さそうに見えて良い位置にあります(私は異なる番号を試して修正し、最終的に13と25で修正します)が、hdpiでは情報ウィンドウはマーカーの上部ではなくマーカーの中心を見ます。なぜですか?ピクセルからdpへのコンバーターを使用している間。

編集:

たぶん、リンクは異なるdpiで画像を見るのに役立ちます:

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

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

4

1 に答える 1

0

リンクをご覧ください:

MapView.LayoutParams

mapview.layoutparamsのxオフセットとyオフセットは、pxに基づいて送信する必要があります。これは、それをdpに変換した場合でも、コンストラクターはそれを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   );
于 2013-01-11T15:33:03.127 に答える