2011-08-03 37 views
2

我試圖跟蹤邊界Rect的一個孩子TextView我爲了得到TextView的邊框相對於其父使用View.getGlobalVisibleRect(Rect)擴展LinearLayout一個類裏面。它在某些設備上運行良好,但顯然在其他手機上出現某種單元問題。我所看到的簡單例子:什麼預期的drawRect單元問題的android

//Extended LinearLayout's onDraw 
protected void onDraw(Canvas canvas){ 
    super.onDraw(canvas); 
    TextView tv = (TextView)findViewById(R.id.textView1); 
    Rect bounds = new Rect(); 
    tv.getGlobalVisibleRect(bounds); 
    canvas.drawRect(bounds, myPaint); 
} 

是,它應該吸取TextView的電視下一個框。它在我的3.1平板電腦上運行,但在我的1.6和2.3手機上,它繪製了TextView下方的框。似乎我需要將邊界框的值轉換爲不同類型的像素單位,以便獲得我期望的一致結果。

問題是我不確定返回的Rect是否已經是DIP或標準像素。我曾嘗試做兩個:

bounds.top = TypedValue.complexToDimensionPixelSize(bounds.top, getContext().getResources().getDisplayMetrics());

bounds.top = TypedValue.COMPLEX_UNIT_DIP, bounds.top, getContext().getResources().getDisplayMetrics());

但是這些都似乎在箱頂被轉換到它應該是。我將不勝感激任何反饋或建議。

謝謝!

回答

1

原來,getGlobalVisibleRect或者是在3.0之前破解的,或者不會返回我所期望的。我發現我可以這樣做。

TextView tv = (TextView)findViewById(R.id.textView1); 
Rect bounds = new Rect(tv.getLeft(), tv.getTop(), tv.getRight(), tv.getBottom()); 
+0

'getGlobalVisibleRect'返回絕對(根)座標。您必須通過視圖的座標來抵消它們,正如[文檔中所述](http://goo.gl/U6oVs) – MartinodF