Zaprojektowałem prosty układ. Skończyłem projekt bez animacji, ale teraz chcę dodawać animacje po zdarzeniu kliknięcia widoku tekstu i nie wiem, jak go używać. Czy mój projekt xml wygląda dobrze, czy nie? Wszelkie sugestie będą mile widziane.
Mój 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>
Moja 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);
przeciwnym razie układ pozostanie niewidoczny i nie zniknie.ViewCompat.animate()
który jest częścią biblioteki obsługi i używa Animatorów w nowszych wersjach i Wyświetl animacje w systemie Android 3.0 i niższych.ViewCompat.animate()
.Najłatwiejszym sposobem animowania
Visibility
zmian jest użycieTransition API
pakietu dostępnego w pakiecie wsparcia (Androidx). Wystarczy wywołaćTransitionManager.beginDelayedTransition
metodę, a następnie zmienić widoczność widoku. Istnieje kilka domyślnych Przejścia jakFade
,Slide
.Gdzie
parent
jest rodzicemViewGroup
widoku animowanego. Wynik:Oto wynik
Slide
przejścia:Łatwo jest napisać niestandardowe przejście, jeśli potrzebujesz czegoś innego. Oto przykład, z
CircularRevealTransition
którym napisałem w innej odpowiedzi . Pokazuje i ukrywa widok z animacją CircularReveal.android:animateLayoutChanges="true"
opcja robi to samo, po prostu używa AutoTransition jako przejścia.źródło
beginDelayedTransition
s?Sprawdź ten link. Który pozwoli na animacje takie jak L2R, R2L, T2B, B2T.
Ten kod pokazuje animację od lewej do prawej
jeśli chcesz to zrobić z R2L, użyj
od góry do dołu jako
i vice versa ..
źródło
Spróbuj dodać tę linię do układu nadrzędnego xml
Twój układ będzie wyglądał następująco
źródło
Na podstawie odpowiedzi @Xaver Kapeller wymyśliłem sposób tworzenia animacji przewijania, gdy na ekranie pojawiają się nowe widoki (a także animacja, aby je ukryć).
Wynika z tego stanu:
do
i wzajemnie.
Tak więc, gdy użytkownik kliknie pierwszy przycisk, elementy „Przycisk 1”, „Przycisk 2”, „Przycisk 3” i „Przycisk 4” pojawią się przy użyciu animacji zanikania, a element „Ostatni przycisk” przesunie się w dół do końca. Zmieni się również wysokość układu, umożliwiając prawidłowe korzystanie z widoku przewijania.
Oto kod pokazujący elementy z animacją:
i to jest kod, aby ukryć elementy animacji:
Zauważ, że metoda ukrywania animacji jest prosta. W detektorze animacji mHiddenLinearLayout musiałem usunąć sam detektor za pomocą:
Dzieje się tak, ponieważ po dołączeniu detektora animacji do widoku, następnym razem, gdy jakakolwiek animacja zostanie wykonana w tym widoku, detektor również zostanie wykonany. Może to być błąd w detektorze animacji.
Kod źródłowy projektu znajduje się na GitHub: https://github.com/jiahaoliuliu/ViewsAnimated
Miłego kodowania!
Aktualizacja : dla każdego detektora dołączonego do widoków należy go usunąć po zakończeniu animacji. Odbywa się to za pomocą
źródło
view.animate().setListener(null);
Oświadczenie zapisany mój dzień. To zdecydowanie wydaje się być błędem.Byłem w stanie pokazać / ukryć menu w ten sposób:
MenuView.java (rozszerza FrameLayout)
Źródło
źródło