このコードを使用して、マーカーに関する情報をマーカーの上に表示するレイアウトを追加しています。このコードでは、コードを使用してピクセルを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