Ich habe ein einfaches Layout entworfen. Ich habe das Design ohne Animation fertiggestellt, aber jetzt möchte ich Animationen hinzufügen, wenn die Textansicht auf ein Ereignis klickt, und ich weiß nicht, wie ich es verwenden soll. Hat mein XML-Design gut ausgesehen oder nicht? Anregungen wäre dankbar.
Mein XML
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:longClickable="false"
android:orientation="vertical"
android:weightSum="16" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:background="#00DDA0"
android:layout_weight="3" >
</LinearLayout>
<TextView
android:id="@+id/Information1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:text="Child Information"
android:background="#0390BE"
android:layout_weight="0.75"
android:textColor="#FFFFFF"
android:layout_gravity="center|fill_horizontal"/>
<LinearLayout
android:id="@+id/layout1"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="8.5"
android:background="#BBBBBB"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="TextView" />
</LinearLayout>
<TextView
android:id="@+id/Information2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:text="Parent Information"
android:background="#0390BE"
android:layout_weight="0.75"
android:textColor="#FFFFFF"
android:layout_gravity="center|fill_horizontal"/>
<LinearLayout
android:id="@+id/layout2"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:background="#BBBBBB"
android:layout_weight="8.5" >
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="TextView" />
</LinearLayout>
<TextView
android:id="@+id/Information3"
android:layout_width="match_parent"
android:layout_height="0dp"
android:text="Siblings"
android:background="#0390BE"
android:layout_weight="0.75"
android:textColor="#FFFFFF"
android:layout_gravity="center|fill_horizontal"/>
<LinearLayout
android:id="@+id/layout3"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:background="#BBBBBB"
android:layout_weight="8.5" >
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="TextView" />
</LinearLayout>
<TextView
android:id="@+id/Information4"
android:layout_width="match_parent"
android:layout_height="0dp"
android:text="Teacher Information"
android:background="#0390BE"
android:layout_weight="0.75"
android:textColor="#FFFFFF"
android:layout_gravity="center|fill_horizontal"/>
<LinearLayout
android:id="@+id/layout4"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:background="#BBBBBB"
android:layout_weight="8.5" >
<TextView
android:id="@+id/textView4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="TextView" />
</LinearLayout>
<TextView
android:id="@+id/Information5"
android:layout_width="match_parent"
android:layout_height="0dp"
android:text="Grade Information"
android:background="#0390BE"
android:layout_weight="0.75"
android:textColor="#FFFFFF"
android:layout_gravity="center|fill_horizontal"/>
<LinearLayout
android:id="@+id/layout5"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:background="#BBBBBB"
android:layout_weight="8.5" >
<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="TextView" />
</LinearLayout>
<TextView
android:id="@+id/Information6"
android:layout_width="match_parent"
android:layout_height="0dp"
android:text="Health Information"
android:background="#0390BE"
android:layout_weight="0.75"
android:textColor="#FFFFFF"
android:layout_gravity="center|fill_horizontal"/>
<LinearLayout
android:id="@+id/layout6"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:background="#BBBBBB"
android:layout_weight="8.5" >
<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="TextView"
android:layout_weight="8.5" />
</LinearLayout>
</LinearLayout>
Mein Java
public class Certify_Info extends Activity {
private static TextView tv2,tv3,tv5,tv6,tv4,tv1;
private static LinearLayout l1,l2,l3,l4,l5,l6;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_certify__info);
tv1=(TextView) findViewById(R.id.Information1);
tv2=(TextView) findViewById(R.id.Information2);
tv3=(TextView) findViewById(R.id.Information3);
tv4=(TextView) findViewById(R.id.Information4);
tv5=(TextView) findViewById(R.id.Information5);
tv6=(TextView) findViewById(R.id.Information6);
l1=(LinearLayout) findViewById(R.id.layout1);
l2=(LinearLayout) findViewById(R.id.layout2);
l3=(LinearLayout) findViewById(R.id.layout3);
l4=(LinearLayout) findViewById(R.id.layout4);
l5=(LinearLayout) findViewById(R.id.layout5);
l6=(LinearLayout) findViewById(R.id.layout6);
l2.setVisibility(View.GONE);
l3.setVisibility(View.GONE);
l4.setVisibility(View.GONE);
l5.setVisibility(View.GONE);
l6.setVisibility(View.GONE);
tv1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
l2.setVisibility(View.GONE);
l3.setVisibility(View.GONE);
l4.setVisibility(View.GONE);
l5.setVisibility(View.GONE);
l6.setVisibility(View.GONE);
l1.setVisibility(View.VISIBLE);
}
});
tv2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
l1.setVisibility(View.GONE);
l3.setVisibility(View.GONE);
l4.setVisibility(View.GONE);
l5.setVisibility(View.GONE);
l6.setVisibility(View.GONE);
l2.setVisibility(View.VISIBLE);
}
});
tv3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
l1.setVisibility(View.GONE);
l2.setVisibility(View.GONE);
l4.setVisibility(View.GONE);
l5.setVisibility(View.GONE);
l6.setVisibility(View.GONE);
l3.setVisibility(View.VISIBLE);
}
});
tv4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
l1.setVisibility(View.GONE);
l2.setVisibility(View.GONE);
l3.setVisibility(View.GONE);
l4.setVisibility(View.GONE);
l5.setVisibility(View.GONE);
l6.setVisibility(View.GONE);
l4.setVisibility(View.VISIBLE);
}
});
tv5.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
l1.setVisibility(View.GONE);
l2.setVisibility(View.GONE);
l3.setVisibility(View.GONE);
l4.setVisibility(View.GONE);
l6.setVisibility(View.GONE);
l5.setVisibility(View.VISIBLE);
}
});
tv6.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
l1.setVisibility(View.GONE);
l2.setVisibility(View.GONE);
l3.setVisibility(View.GONE);
l4.setVisibility(View.GONE);
l5.setVisibility(View.GONE);
l6.setVisibility(View.VISIBLE);
}
});
}
}
view.clearAnimation();
view.setVisibility(View.GONE);
Andernfalls bleibt das Layout unsichtbar und nicht verschwunden.ViewCompat.animate()
Teil der Support-Bibliothek, der Animators in neueren Versionen und View Animations unter Android 3.0 und niedriger verwendet.ViewCompat.animate()
.Der einfachste Weg,
Visibility
Änderungen zu animieren , ist die Verwendung desTransition API
Support-Pakets (androidx). Rufen Sie einfach dieTransitionManager.beginDelayedTransition
Methode auf und ändern Sie die Sichtbarkeit der Ansicht. Es gibt verschiedene Standardübergänge wieFade
,Slide
.Wo
parent
ist das übergeordnete ElementViewGroup
der animierten Ansicht? Ergebnis:Hier ist das Ergebnis mit
Slide
Übergang:Es ist einfach, einen benutzerdefinierten Übergang zu schreiben, wenn Sie etwas anderes benötigen. Hier ist ein Beispiel, mit
CircularRevealTransition
dem ich in einer anderen Antwort geschrieben habe . Die Ansicht wird mit der CircularReveal-Animation ein- und ausgeblendet.android:animateLayoutChanges="true"
Die Option macht dasselbe, sie verwendet nur AutoTransition als Übergang.quelle
beginDelayedTransition
s machen?Bitte überprüfen Sie dies Link. Dies ermöglicht Animationen wie L2R-, R2L-, T2B- und B2T-Animationen.
Dieser Code zeigt die Animation von links nach rechts
Wenn Sie es von R2L aus tun möchten, verwenden Sie
für von oben nach unten als
und umgekehrt ..
quelle
Versuchen Sie, diese Zeile zum übergeordneten XML-Layout hinzuzufügen
Ihr Layout wird so aussehen
quelle
Basierend auf der Antwort von @Xaver Kapeller habe ich eine Möglichkeit gefunden, eine Bildlaufanimation zu erstellen, wenn neue Ansichten auf dem Bildschirm angezeigt werden (und auch eine Animation, um sie auszublenden).
Es geht von diesem Zustand aus:
zu
und umgekehrt.
Wenn der Benutzer auf die erste Schaltfläche klickt, werden die Elemente "Schaltfläche 1", "Schaltfläche 2", "Schaltfläche 3" und "Schaltfläche 4" mithilfe einer Überblendanimation angezeigt und das Element "Letzte Schaltfläche" wird bis zum Ende nach unten verschoben. Die Höhe des Layouts ändert sich ebenfalls, sodass die Bildlaufansicht ordnungsgemäß verwendet werden kann.
Dies ist der Code zum Anzeigen von Elementen mit Animation:
und dies ist der Code zum Ausblenden von Elementen der Animation:
Beachten Sie, dass die Methode zum Ausblenden der Animation einen einfachen Hack enthält. Auf dem Animations-Listener mHiddenLinearLayout musste ich den Listener selbst entfernen, indem ich Folgendes verwendete:
Dies liegt daran, dass, sobald ein Animationslistener an eine Ansicht angehängt ist, das nächste Mal, wenn eine Animation in dieser Ansicht ausgeführt wird, auch der Listener ausgeführt wird. Dies könnte ein Fehler im Animations-Listener sein.
Der Quellcode des Projekts befindet sich auf GitHub: https://github.com/jiahaoliuliu/ViewsAnimated
Viel Spaß beim Codieren!
Update : Für jeden Listener, der an die Ansichten angehängt ist, sollte er nach Ende der Animation entfernt werden. Dies geschieht mit
quelle
view.animate().setListener(null);
Aussage hat mir den Tag gerettet. Dies scheint definitiv ein Fehler zu sein.Ich konnte ein Menü folgendermaßen ein- / ausblenden:
MenuView.java (erweitert FrameLayout)
Quelle
quelle