2012-02-26 15 views
8

Android 4.0’ın bildirim çubuğunda, son uygulama listelerinde veya tarayıcı sekmelerinde gördüğümüze benzer şekilde, ListView’de hızlıca kaydırmaya geçiş özelliğini uygulamak istediğim bir uygulama üzerinde çalışıyorum. Android 2.2+ sürümünü çalıştıran cihazlarda uygulamayı çalıştırmak istiyorum. Aşağıdaki resme bakınız. Ayrıca, ICS'de olduğu gibi, kaydırılan öğenin saydamlığını da değiştirmek istiyorum. ListView'de işlevselliği kapatmak için Android 4.0 kaydırma nasıl uygulanır?

Android 4.0 Web Browser - Swiping away the open tabs http://img19.imageshack.us/img19/3605/screenshot2012022617290.png

Ben http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.1_r1/com/android/browser/TabScrollView.java?av=f ICS web tarayıcısı kaynağını kontrol ancak bu işlevlerin uygulanmasında özellikle sorumlu olduğu sınıf çözemedim.

Buraya kimse bana doğru yönde işaret edebilir mi? Android Uyumluluk Kitaplığı'nı kullanarak yapabilir miyiz? Lütfen bana haber ver. Çok teşekkürler.

cevap

0

Bunun oldukça eski bir soru olduğunu biliyorum, fakat Hala bunu arayan herkes için, Roma Nurik'in kütüphanesine bir göz atabilirsiniz: https://github.com/romannurik/Android-SwipeToDismiss

Bu, liste görünümünün yanı sıra normal görünümler için gerekli davranışın nasıl oluşturulacağını gösterir.

3

Böyle bir özelliği de uygulamayı düşündüm ama henüz yapmadım. Bu yüzden sağlayabileceğim tek şey, bu soruna I'un nasıl yaklaşacağına dair bazı fikirler. Sonunda bir kod yazmış olsaydım, onu buraya gönderirim.

  1. gereken ana sınıfı bir ListAdapter (ArrayAdapter, SimpleCursorAdapter vs.) uzanan özel bir adaptör olup.
  2. Bağdaştırıcı, tüm Görünümlerine bir View.OnTouchListener uygular.
  3. Bu dinleyici, yatay kaydırma dx'u algıladığında, concernedView.offsetLeftAndRight(dx)'u çağırır (bu, görünümü sürüklenebilir hale getirir). Elbette adaptör, görünüm için mevcut yatay ofseti kaydetmelidir. Kullanıcı bir görünümü sürükleyip parmağını ekrandan kaldırırsa, touchListener bunu da algılayacak ve slayt geri animasyonunu başlatacaktır. Geçerli ofset kullanarak bir alfa değerini de hesaplayabiliriz, böylece ekran sınırlarına yaklaştığında görünüm kaybolur.
  4. Bir liste girdisi sonunda kullanıcı tarafından reddedilirse, bu biraz zor olur ve hala aşağıdaki eylemi nasıl uygulayacağımı bilmiyorum: Liste içeriği güncellenmelidir (veya bağdaştırıcının işten çıkarılan girişler) ve işten çıkarılanın altında kalan görüşler, boşluğu doldurmak için yukarı doğru çıkmalıdır. ListView'in yeni içeriği yüklemesine izin vermek için işe yarayabilir, ancak bu boşluğu anında doldurur. Bundan kaçınmak için, tüm ilgili görüntülerin eski konumlarından (hala boşluğa sahip olduğumuz yerden) mevcut konumlarına (boşluğun doldurulduğu yer) geri dönmesini sağlayan bir animasyon başlatırdım.

Bunlar, bazı kişilerin bu sorun üzerinde çalışmaya başlamasına yardımcı olabilecek bazı düşüncelerim. Dediğim gibi, muhtemelen bunu gelecekte de uygulayacağım ve elbette kodu buraya göndereceğim.
Yorumlarda herhangi bir geri bildirim için minnettarım, ama fikrimin her yönünü açıklamak istemiyorum, bu beni çok fazla zaman alacaktı;)

+0

Bu bir başlangıç. Buna dayalı bir şeyler oluşturmaya çalışacağım ve başarılı olursam burayı güncelleyeceğim. – iamronak

+3

Görünümü kaldırmadan önce, yüksekliği 0'a getirin. Bu, listenin güzel bir şekilde çökmesini sağlar. Daha sonra bir bildirim bir çırpma anahtarı olmayacaktır. – Hounshell

İlgili konular