Android - 滚动/移动ListView本身

3
我看过一些现代的 Android 和 iOS 应用程序,页面顶部会有一张图片,覆盖整个屏幕宽度。在其下方,会有一个 ListView,其长度会延伸到整个页面。
当你开始向下滑动 ListView 时,ListView 自身开始向上移动,直到完全覆盖屏幕顶部。
这样做的应用程序有:Google Play 商店、Huffington Post、YouTube。
我试过搜索相关资料,但没有找到任何相对应的来源。

他们只有一个大小与图像相同的空标题。 - tyczj
@tyczj 那么当用户向下滚动时,他们是否会逐渐减小标题的大小?我猜测是这样的? - Subby
不要有任何缩减,标题保持不变,图像位于列表视图下方。 - tyczj
哦,当然。抱歉...我现在明白了。谢谢。我现在会尝试并标记答案,如果您提供的话。 - Subby
我觉得你可以在头部滚动时翻译图片,但那似乎需要额外的工作。 - tyczj
2个回答

2

这是一种视觉上的技巧,似乎图像和列表是一个整体,但实际上并不是。

基本上,您有一个带有与图像大小相同的头部视图的列表视图,在列表视图下方有您的图像,因此当您滚动时,它看起来像列表视图正在滚动图像上方。

布局将类似于以下内容:

<RelativeLayout>

    <ImageView></ImageView>

    <ListView></ListView>

</RelativeLayout>

创建另一个头部布局,大小与图像视图相同。
当列表滚动时,您还可以在 Y 方向上对图像进行翻译,但是您必须全局持有视图,以便在类中使用 v.setTranslateY() 进行翻译。

0
你需要给列表视图添加一个标题。你可以通过以下方式实现:
final View header = LayoutInflater.from(getActivity()).inflate(R.layout.myheader, null);
((ListView) getActivity().findViewById(R.id.list)).addHeader(header);

然后你可以通过以下方式实现滚动效果:

    ((ListView) getActivity().findViewById(R.id.list)).setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            if (v.getChildCount() > 0 && v.getChildAt(0) != null)
                header.setTranslationY(Math.round(-v.getChildAt(0).getTop() * 0.5));
        }
    });

这里的 header 是列表视图的头部

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接