5

Ich habe eine LinearLayout mit layoutAnimation Eigenschaft, die für eine Anpassung ExpandableListView verwendet wird. wie folgt:layoutAnimation funktioniert nur einmal

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layoutAnimation="@drawable/list_layout_controller" 
    android:orientation="vertical" > 

Wenn ich auf die Liste klicke, wird die Animation angezeigt. Aber es funktioniert nur einmal und es wird die Liste beim nächsten Klick nicht animieren. Warum?

Bitte lassen Sie mich wissen, wenn Sie weitere Beschreibung benötigen.

Danke

+1

durch Klick u erweitern bedeuten verwenden und einen Punkt zusammenbrechen ..? – Ronnie

+0

Ja, ein Element erweitern und reduzieren – Kermia

+0

Können Sie den list_layout_contorller einfügen? Erweitern Sie die ExpandableListView oder erstellen Sie eine neue? Müssen einige Code zu sehen .. – Ronnie

Antwort

7

Layout-Animationen ausgeführt werden, wenn Blick auf das Layout hinzugefügt werden. Daher müssen Sie die Ansichten bei jedem Expand/Collapse manuell hinzufügen/entfernen, damit die Layoutanimation funktioniert.

Dazu können Sie eine Übersicht der Ansichten mit dem Listenindex als Schlüssel pflegen. Jedes Mal, wenn Sie einen Klick erhalten, wählen Sie einfach die entsprechenden Elemente aus der Karte und fügen Sie sie Ihrem Layout hinzu. Die Animation wird auf dieser Ansicht ausgeführt und Ihr Problem ist behoben.

Sie können auch versuchen, indem Sie die Sichtbarkeit der Ansichten in onClick() ändern. Aber ich bin mir nicht sicher. Versuchen Sie es und lassen Sie mich wissen.

Hoffe, dass hilft.

+0

Vielen Dank. Diese Zeile hat mir geholfen: 'Layout-Animationen werden ausgeführt, wenn Ansichten zum Layout hinzugefügt werden ' – Kermia

+1

@Kermia: Können Sie mir bitte sagen, wie Sie Ihr Problem gelöst haben? –

+0

Danke für den Hinweis, die Sichtbarkeit zu ändern: Ich benutze einen 'LayoutAnimationController', der auch nur einmal ausgelöst hat. Jetzt setze ich die Layout-Sichtbarkeit auf 'GONE', in der nächsten Anweisung setze ich sie auf' VISIBLE' und in der folgenden Anweisung schreibe ich 'myLayout.setLayoutAnimation (myLayoutAnimController);' Funktioniert perfekt :-) – 0X0nosugar

1

Try Animation für jedes Element klicken neu zu starten:

lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 
     view.getAnimation().start(); 
     //your custom logic 
} 
}); 
+0

Nein, funktioniert nicht – Kermia

9

Zuerst möchte u

Animation listanimation = AnimationUtils.loadAnimation(mainActivity.this, R.anim.list_layout_controller); 

und jedes Mal clearAnimation zuerst erklären. In clickevent von Linearlayout

linearLayout.clearAnimation(); 
linearLayout.startAnimation(listanimation); 
2

Anruf

listView.scheduleLayoutAnimation();

, bevor alle Änderungen in der Liste