2012-02-26 101 views
8

我正在研究一個應用程序,我希望在ListView中實現輕掃即可解除功能 - 類似於我們在Android 4.0的通知欄,最近使用的應用程序列表或瀏覽器選項卡中看到的功能。我想在運行Android 2.2+的設備上運行該應用程序。看到下面的圖片。我也想改變被擦掉項目的透明度 - 就像ICS一樣。如何實現Android 4.0像刷卡清除ListView中的功能?

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

我檢查了ICS網絡瀏覽器的源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但無法找出哪些類是實現該功能特別負責。

任何人都可以在正確的方向指向我嗎?我們可以使用Android兼容庫來做到這一點嗎?請告訴我。非常感謝。

回答

0

我知道這是一個相當古老的問題,但對於任何人仍然在尋找這個,你可以看看羅馬努裏克的圖書館在這裏:https://github.com/romannurik/Android-SwipeToDismiss

這顯示瞭如何創建列表視圖以及普通視圖所需的行爲。

3

我也想過實現這樣的功能,但我還沒有做到。所以我可以提供的唯一一點是關於如何處理這個問題的一些想法。如果我最終寫了一些代碼,我會在這裏發佈。

  1. 所需的主要類是一個自定義適配器,它擴展了ListAdapter(ArrayAdapter,SimpleCursorAdapter等)。
  2. 適配器將View.OnTouchListener應用於其所有視圖。
  3. 無論何時該聽衆檢測到水平滾動dx,它都會調用concernedView.offsetLeftAndRight(dx)(這將使視圖可拖動)。當然,適配器必須保存視圖的當前水平偏移量。如果用戶正在拖動視圖並將他/她的手指從屏幕上移開,那麼touchListener也會檢測到這一點,並開始回退動畫。使用當前的偏移量,我們也可以計算一個alpha值,所以當它接近屏幕邊界時,視圖會淡出。
  4. 如果一個列表條目最終被用戶解僱,它變得有點棘手,我仍然不確定我將如何實現以下操作:列表內容必須更新(或者適配器必須忽略被駁回的條目),低於被駁回條款的觀點必須向上徘徊以彌補差距。我認爲這可能會讓ListView加載新內容,但這會立即填補空白。爲了避免這種情況,我會開始一個動畫,讓所有關注的視圖從他們以前的位置(我們仍然存在差距的位置)回到他們當前的位置(差距被填充的位置)。

這些只是我對這個問題的一些想法,可能會幫助一些人開始處理這個問題。就像我說的那樣,我可能會在未來的某個時候實現,當然我會在這裏發佈代碼。
我會很感激評論中的任何反饋,但我不想詳細解釋我的想法的每一個方面,這將花費我太多時間;)

+0

那麼,這是一個開始。我會嘗試在此基礎上創建一些內容,如果成功,我會在這裏更新。 – iamronak 2012-02-27 06:22:41

+3

在刪除視圖之前,將其高度設置爲0.這將使列表很好地摺疊。然後通知將不會是一個令人不安的瞬間。 – Hounshell 2012-10-24 16:15:05