2010-12-08 10 views
6

Es gibt anscheinend eine bug in Android, die bricht.Wie bringe ich einen Blick nach vorne, ohne bringToFront() aufzurufen?

Wenn ich Ansichten in einer GridView angeordnet habe und eine Ansicht nach vorne bringen möchte, indem ich BringToFront() aufruft, kann es an die untere rechte Position in der GridView verschoben werden.

Etwas schattiges geht dort auf, so dass ich bringToFront() nicht verwenden kann. Wenn ich es nicht nenne, funktioniert alles gut. Aber die Ansichten überschneiden sich - wenn ich die Skalierungsanimation zum Vergrößern einer Ansicht verwende, wird sie teilweise von den Ansichten nach unten und rechts verdeckt.

Ich habe bringToFront der Quelle ausgecheckt und es ruft parent.bringChildToFront (...)

es diese Methode es entfernt den Blick von sich selbst scheinbar

public void bringChildToFront(View child) { 
    int index = indexOfChild(child); 
     if (index >= 0) { 
      removeFromArray(index); 
      addInArray(child, mChildrenCount); 
      child.mParent = this; 
     } 
    } 

ist! Ohne Gnade! Ist eine ViewGroup so dumm, dass sie Z-Indizes nicht auf andere Weise verwalten kann, als dass sie die Kontrollen mischen? Wenn GridView seinen untergeordneten Knoten entfernt und dann wieder hinzufügt, wird er offensichtlich am Ende des Gitters platziert.

Gibt es etwas, was ich tun kann, um eine Ansicht über andere zu zeigen, ohne auf etwas Hacking zurückzugreifen? Eine Sache, die mir in den Sinn kommt, ist, eine weitere Ansicht oberhalb der GridView zu erstellen, die über der zu sein scheint, die ich bringe ToFront(), aber ich mag diese Lösung nicht.

Antwort

3

offenbar habe ich die android:clipChildren="false" Eigenschaft in GridView verpasst. Es löst mein Problem.

+0

Dies funktioniert nicht mit Property Animation. –

1

Haben Sie versucht, die View fokussierbar und nur RequestFocus() aufrufen?

1

Aufruf bringToFront() ändert die Reihenfolge in der GridView. Versuchen Sie, ein ImageView mit einem Bild der Ansicht zu erstellen, die Sie animieren möchten, und animieren Sie diese stattdessen.

Fügen Sie Ihrer Animation einen Animationslistener hinzu und entfernen Sie die ImageView am Ende der Animation.

1

Von 21 API können Sie anrufen:

view.setZ(float) 
0

Wenn Sie API über 21 Ziel, können Sie einfach das Attribut android:translationZ="xxx dp" zu Ihrem XML hinzuzufügen.

Bitte beachten Sie, dass Sie, wenn Sie Ansichten wie cardview hinzufügen, in die Z-Achse gehen. Und wenn Sie möchten, dass eine Ansicht auf diese Weise in den Vordergrund kommt, müssen Sie sie nur höher als die von Ihnen festgelegte Höhe machen.

Beispiel: 6 dp Elevation in cardview erfordert eine 7dp im Attribut translationZ der Ansicht, die Sie Vordergrund möchten.

Verwandte Themen