Carousel
bir
öğelerin listesini gösteren özel bant görünümleri oluşturmak için hareket yardımcı nesnesi
göz atabileceği bir yer. Bu tür uygulamaları içeren diğer yollarla karşılaştırıldığında
bu yardımcı, karmaşık hareket ve boyut değişiklikleri oluşturmanızı sağlar.
Carousel
için
MotionLayout
Carousel
widget'ı, başında ve sonunda bulunan listelerin yanı sıra dairesel biçimde de listeleri destekler.
bir liste hazırlayabilirsiniz.
MotionLayout ile Carousel işleyiş şekli
Orta öğenin bulunduğu yatay bir Carousel
görünümü oluşturmak istediğinizi varsayalım
büyütülmüş:
Bu temel düzen, Carousel
öğeyi temsil eden çeşitli görünümler içerir:
Aşağıdaki üç durumla bir MotionLayout
oluşturun ve bunlara kimlik verin:
- önceki
- başlangıç
- sonraki
start durumu temel düzene karşılık geliyorsa previous durumunda
sonraki durumu ise Carousel
öğe bir sola kaydırılır ve
sağa dokunun.
Örneğin, Şekil 3'teki beş görünümü alın ve başlangıçta B, C ve D görünümleri görünürken A ve E ekranın dışındadır. Ayarla yukarı önceki duruma getirin. Böylece A, B, C ve D konumları B, C, D ve E, görüşler soldan sağa doğru değişti. Sonraki durum tam tersi olmalıdır. B, C, D ve E, A, B konumuna taşınır ve C, D ve görüşler sağdan sola doğruydu. Bu değer şekilde gösterilmektedir 4:
Görüntülemelerin, tam olarak orijinal görüntülemelerin başladığı yerde bitmesi çok önemlidir.
Carousel
, sonsuz öğe koleksiyonu illüzyonunu verir
gerçek görünümleri eski konumlarına geri getirme ancak bunları yeniden başlatma
eşleştirmenizi sağlar. Aşağıdaki şemada bu mekanizma gösterilmektedir. Öde
dikkat edin: değerler):
Geçişler
Hareket sahnesi dosyanızda tanımlanan bu üç kısıtlama kümesiyle,
start ile next arasındaki ileri ve geri geçişler
başlangıç ve önceki durumlarını dahil edin. Bir
OnSwipe
işleyicisini
aşağıda gösterildiği gibi bir harekete yanıt olarak geçişleri tetikler
örnek:
<Transition
motion:constraintSetStart="@id/start"
motion:constraintSetEnd="@+id/next"
motion:duration="1000"
android:id="@+id/forward">
<OnSwipe
motion:dragDirection="dragLeft"
motion:touchAnchorSide="left" />
</Transition>
<Transition
motion:constraintSetStart="@+id/start"
motion:constraintSetEnd="@+id/previous"
android:id="@+id/backward">
<OnSwipe
motion:dragDirection="dragRight"
motion:touchAnchorSide="right" />
</Transition>
Ruloyu ekleme
Bu temel hareket sahnesi oluşturulduktan sonra düzene bir Carousel
yardımcısı ekleyin.
ve görünümlere, önceki ve sonraki uygulamanızı uyguladığınız sırayı
animasyon ekler.
Carousel
yardımcısı için şu özellikleri ayarlayın:
app:carousel_firstView
: İlk öğeyi temsil eden görünümCarousel
—bu örnekte, C.app:carousel_previousState
: önceki öğeninConstraintSet
kimliği durumu.app:carousel_nextState
: Sonraki durumunConstraintSet
kimliği.app:carousel_backwardTransition
:Transition
Başlangıç ile önceki durumlar arasında uygulanan kimlik.app:carousel_forwardTransition
:Transition
start ve next durumları için kullanılır.
Örneğin, düzen XML dosyanızda şöyle bir şey olsun:
<androidx.constraintlayout.motion.widget.MotionLayout ... >
<ImageView android:id="@+id/imageView0" .. />
<ImageView android:id="@+id/imageView1" .. />
<ImageView android:id="@+id/imageView2" .. />
<ImageView android:id="@+id/imageView3" .. />
<ImageView android:id="@+id/imageView4" .. />
<androidx.constraintlayout.helper.widget.Carousel
android:id="@+id/carousel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:carousel_forwardTransition="@+id/forward"
app:carousel_backwardTransition="@+id/backward"
app:carousel_previousState="@+id/previous"
app:carousel_nextState="@+id/next"
app:carousel_infinite="true"
app:carousel_firstView="@+id/imageView2"
app:constraint_referenced_ids="imageView0,imageView1,imageView2,imageView3,imageView4" />
</androidx.constraintlayout.motion.widget.MotionLayout>
Kodda bir Carousel
adaptörü kurun:
Kotlin
carousel.setAdapter(object : Carousel.Adapter { override fun count(): Int { // Return the number of items in the Carousel. } override fun populate(view: View, index: Int) { // Implement this to populate the view at the given index. } override fun onNewItem(index: Int) { // Called when an item is set. } })
Java
carousel.setAdapter(new Carousel.Adapter() { @Override public int count() { // Return the number of items in the Carousel. } @Override public void populate(View view, int index) { // Populate the view at the given index. } @Override public void onNewItem(int index) { // Called when an item is set. } });
Ek notlar
"Seçili" olan geçerli öğeye bağlı olarak Carousel
ayında, manzaranın
önce veya sonrasındaki öğeleri temsil eden verilerin doğru şekilde gizlenmesi gerekebilir.
Carousel
start ve end'ini hesaba katın. Carousel
yardımcısının işleyicileri
otomatik olarak eklenir. Bu görüntülemeler varsayılan olarak şurada View.INVISIBLE
olarak işaretlenir:
Dolayısıyla genel düzen de değişmez.
Bunun yerine Carousel
yardımcısının işaretlediği alternatif bir mod mevcut.
bu görüntülemeleri View.GONE
olarak belirlediniz. Bu modu, aşağıdaki özelliği kullanarak ayarlayabilirsiniz:
app:carousel_emptyViewsBehavior="gone"
Örnekler
Bant yardımcısının kullanımıyla ilgili daha fazla örnek için örnek projeler bulabilirsiniz.