2012-02-26 77 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