8

我正在开发一个应用程序,我想在其中实现 ListView 中的滑动关闭功能 - 类似于我们在 Android 4.0 的通知栏、最近的应用程序列表或浏览器选项卡中看到的内容。我想在运行 Android 2.2+ 的设备上运行该应用程序。请参见下图。我还想改变被刷掉的项目的透明度——就像在 ICS 中一样。

Android 4.0 Web 浏览器 - 滑动打开的标签页

我在http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.1_r1/com/android/browser/上检查了 ICS Web 浏览器的来源TabScrollView.java?av=f但无法确定哪个类特别负责实现此功能。

谁能在这里指出我正确的方向?我们可以使用 Android 兼容性库来做到这一点吗?请告诉我。非常感谢。

4

2 回答 2

3

我也想过实现这样的功能,但我还没有做到。所以我唯一能提供的就是关于如何解决这个问题的一些想法。如果我最终写了一些代码,我会在这里发布。

  1. 所需的主要类是一个自定义适配器,它扩展了一个ListAdapter(ArrayAdapter、SimpleCursorAdapter 等)。
  2. 适配器将 View.OnTouchListener 应用于其所有视图。
  3. 每当该侦听器检测到水平滚动dx时,它就会调用concernedView.offsetLeftAndRight(dx)(这将使视图可拖动)。当然,适配器必须保存视图的当前水平偏移量。如果用户正在拖动视图并将他/她的手指从屏幕上移开,则 touchListener 也会检测到这一点并开始滑回动画。使用当前偏移,我们还可以计算一个 alpha 值,因此当视图接近屏幕边界时,它会淡出。
  4. 如果一个列表条目最终被用户关闭,它会变得有点棘手,我仍然不确定如何执行以下操作:列表内容必须更新(或者适配器必须忽略被关闭的条目)低于被驳回的观点必须向上盘旋以填补空白。我认为让 ListView 加载新内容可能会起作用,但这会立即填补空白。为了避免这种情况,然后我会启动一个动画,让所有相关视图从它们的旧位置(我们仍然有间隙的位置)悬停到它们的当前位置(填充间隙的位置)。

这些只是我对这个问题的一些想法,可能会帮助一些人开始解决这个问题。就像我说的,我可能会在未来的某个时候实现它,当然我会在这里发布代码。
我会很感激评论中的任何反馈,但我不想彻底解释我想法的每一个方面,这会花费我太多时间;)

于 2012-02-26T18:05:24.937 回答
0

我知道这是一个很老的问题,但是对于仍在寻找这个问题的任何人,您可以在这里查看 Roman Nurik 的库:https ://github.com/romannurik/Android-SwipeToDismiss

这显示了如何为列表视图和普通视图创建所需的行为。

于 2015-06-26T04:35:39.207 回答