我在 google 和 stackoverflow 上搜索了一段时间,但找不到解决方案。是否有可能像 sense ui 那样在 Android 2.2 或 2.1 上获得列表视图过度滚动?!就像在我的警报视图中一样:AlarmView Sense UI
5 回答
看到 Chirag 的回答得到如此高的评价,我感到很震惊。它对任何人都没有帮助,因为它不完整且无法构建。它也没有引用其来源。
原始代码可在此处找到:http ://code.google.com/p/scroll-pager/
另请注意,滚动页面代码是在 GPL 许可下发布的。
更新:我与 scroll-pager 的作者交谈,他现在已切换到 MIT 许可证。
Listview 具有对过度滚动的内置支持。查看setOverscrollMode和相关方法setOverscrollHeader和setOverscrollFooter。ListView 通过覆盖AbsListView.onOverscrolled来使用过度滚动页眉/页脚;如果你想要不同的行为,你可以自己重写它来实现它。
http://developer.android.com/reference/android/widget/ScrollView.html
永远不要将 ScrollView 与 ListView 一起使用,因为 ListView 负责自己的垂直滚动。最重要的是,这样做会破坏 ListView 中处理大型列表的所有重要优化,因为它有效地强制 ListView 显示其整个项目列表以填充 ScrollView 提供的无限容器。
我可以看到这篇文章很老了,但我最近在 GitHub 上发布了这个开源项目,它解决了这个问题,并且可以帮助其他人在未来解决类似的过度滚动问题。
它基本上为许多核心 Android 可滚动视图提供了类似 iOS 的过度滚动效果 - ListView 就是其中之一,并且非常易于应用。
特别是对于列表视图,您需要做的就是启用它:
ListView listView = ... // For example: (ListView) findViewById(R.id.list_view);
OverScrollDecoratorHelper.setUpOverScroll(listView);
要将项目包含在您的项目中,请将其添加到您的 build.gradle 中:
dependencies {
// ...
compile 'me.everything:overscroll-decor-android:1.0.0'
}
在您的 xml 文件中定义滚动视图。
然后在你的java文件中写下这个:
scrollView = (ScrollView) findViewById(R.id.scr);
contentView = (ViewGroup) findViewById(R.id.r2);
scrollView.setOnTouchListener(new ScrollPager(scrollView, contentView));
scrollView.post(new Runnable() {
public void run() {
scrollView.scrollTo(0, contentView.getPaddingTop());
}
});
并在上面的 java 文件中添加一个类:
public class ScrollPager implements OnTouchListener
public ScrollPager(ScrollView aScrollView, ViewGroup aContentView)
{
mScrollView = aScrollView;
mContentView = aContentView;
scroller = new Scroller(mScrollView.getContext(), new OvershootInterpolator());
task = new Runnable()
{
public void run()
{
scroller.computeScrollOffset();
mScrollView.scrollTo(0, scroller.getCurrY());
if (!scroller.isFinished())
{
mScrollView.post(this);
}
}
};
}