2011-08-03 6 views
2

Je suis en train de garder une trace de la délimitation Rect pour un enfant TextView à l'intérieur d'une classe extension LinearLayout J'utilise View.getGlobalVisibleRect(Rect) afin d'obtenir la boîte de sélection du TextView par rapport à son parent. Cela fonctionne très bien sur certains appareils, mais il y a évidemment une sorte de problème d'unité qui se passe sur d'autres téléphones. Exemple simple de ce que je vois:drawRect unité questions 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); 
} 

Ce qui est attendu est qu'il devrait tirer une boîte sous le téléviseur TextView. Il le fait sur ma tablette 3.1, mais sur mes téléphones 1.6 et 2.3, il dessine la boîte en dessous du TextView. Il semble que j'ai besoin de convertir les valeurs de la boîte englobante en un type de pixel différent afin d'obtenir les résultats attendus de manière cohérente. Problème est je ne suis pas sûr si le Rect retourné est déjà en DIP ou pixels standard. Je l'ai essayé de faire les deux:

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

et

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

Mais aucun de ces semble être la conversion de la partie supérieure de la boîte à l'endroit où il devrait être. J'apprécierais grandement tout commentaire ou conseil.

Merci!

Répondre

1

Il s'avère que getGlobalVisibleRect est rompu avant la version 3.0 ou ne renvoie pas ce que j'attends. J'ai trouvé que je pouvais le faire à la place.

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

'getGlobalVisibleRect' renvoie les coordonnées absolues (racine). Vous devez les compenser par les coordonnées de votre View, comme expliqué dans les docs (http://goo.gl/U6oVs) – MartinodF