Android:使 ListView 顶部的 View 与 ListView 一起滚动

标签 android android-listview android-custom-view android-scroll

我有一个显然可以滚动的 ListView 。 ListView 包含一些表单问题。一旦用户提交表单,我们就会在 ListView 顶部放置一个类似图章的自定义 View (并防止用户回答问题,但这并不重要)。

图章应该出现在 ListView 的顶部(如屏幕顶部),并且可以以与 ListView 相同的速度滚动,即当最初位于其下方的 ListView 项目在 ListView 的顶部消失时,它应该消失滚动时的屏幕。

知道如何实现吗?

最佳答案

我找到了一个解决方案。不确定它是否过于优雅,但它确实有效,所以除非有人想出更好的东西,否则我将保留它。

我想和列表一起滚动的 View 是一个自定义 View ,它必须知道 ListView 。所以我在上面实现了一个 setListView(ListView listView) 方法:

private int scrollY; //1
private Map<Integer, Integer> listViewItemHeights = new Hashtable<>();
public void setListView(final ListView listView) {
    listView.setOnScrollListener(new OnScrollListener() {  //2
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {} //3

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //4
            View c = listView.getChildAt(0);
            if (c != null) {
                int oldScrollY = scrollY;
                scrollY = -c.getTop();

                listViewItemHeights.put(listView.getFirstVisiblePosition(), c.getHeight());
                for (int i = 0; i < listView.getFirstVisiblePosition(); ++i) {
                    if (listViewItemHeights.get(i) != null)
                        scrollY += listViewItemHeights.get(i);
                }
                scrollBy(0, scrollY - oldScrollY);
            }
        }
    });
}

评论 1:这是一个让我跟踪当前滚动位置的变量。

评论 2:设置一个新的滚动监听器让我的自定义 View 知道什么时候列表

意见3:本例无需执行。

评论 4:这就是魔法发生的地方。请注意,最后我通过 scrollY - oldScrollY 滚动我的 View ,让我先从这一点开始。 oldScrollY 是保留的滚动位置,scrollY 是新的。我需要滚动它们之间的差异。至于 scrollY 是如何计算的,请引用我的回答:Android getting exact scroll position in ListView ,这是在 ListView 中计算滚动位置的方式。

关于Android:使 ListView 顶部的 View 与 ListView 一起滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13138779/

相关文章:

java - 我应该为以下功能编写哪些单元测试用例?另外,如何提供示例 JSONobject 作为函数中的参数?

android - 使用 kotlin 在 android 中获取屏幕截图的最简单方法是什么?

android - 推荐的 UI View 类型

android - 自定义 View - 将 View 移动到嵌套布局中

没有根元素的Android自定义 View 布局声明

android - 使用两个不同的开发者名称发布 Google Play 应用

android - Samsung Galaxy S2 OpenGl ES 2.0 问题

android - 带有联系人照片的联系人列表会造成性能问题

android - 带有 ListView 的 ScrollView 不滚动 - android

android - 自定义 View 中的涟漪效果