2013-01-10 21 views
0

我正在使用此代碼添加一個佈局,該佈局在標記頂部顯示關於標記的信息。雖然我使用代碼在此代碼中將像素轉換爲dpi。但它不會以不同的dpis相同的觀點看待。在地圖頂部添加信息窗口查看標記在不同的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使用的像素轉換成壓差

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

我的標記寬度×高度的代碼是:25×45

因爲我是新用戶我不能在不同的dpis上發佈我的信息窗口和標記的圖像,但我解釋它。在ldpi中它看起來不錯,並且處於良好的狀態(我通過嘗試不同的數字來修復它,最後通過13和25得到修復)但在hdpi中,信息窗口關於標記的中心而不是標記的頂部。我不明白爲什麼?雖然我用像素轉換器。

編輯:

也許鏈接幫忙看看在不同的充的DPI圖片:

華電國際:http://i.stack.imgur.com/K8vjO.png

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

+0

。有任何身體的想法? –

+0

你爲什麼不使用'OverlayItems'? – Cheesebaron

+0

這是和overlayItem類 –

回答

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 ); 
相關問題