Android - 滚动/移动ListView本身

时间:2014-09-11 13:57:12

标签: android listview scroll offset

我见过一些现代的Android和iOS应用程序,页面顶部会有一个覆盖整个屏幕宽度的图像。在它下面,会有一个ListView一直延伸到页面。

当您开始向下滚动ListView时,ListView本身会开始向上移动,直到它到达屏幕顶部,即完全覆盖顶部屏幕。

执行此操作的应用示例包括: Google 播放 商店赫芬顿 发布 YouTube

我试过谷歌搜索,但没有设法找到相关来源。

2 个答案:

答案 0 :(得分:2)

这是一种视觉上的诡计,似乎图像和列表是一个但它们实际上不是。

基本上你有一个listview,其headerview与图像大小相同,在listview下面你有你的图像,所以当你滚动它时,listview会滚动图像。

布局看起来像这样

<RelativeLayout>

    <ImageView></ImageView>

    <ListView></ListView>

</RelativeLayout>

为标题创建另一个布局,该标题为空白,具有imageview的大小

您还可以在列表滚动时在Y方向上翻译图像,但是您必须在班级中全局保留视图,以便使用v.setTranslateY()进行翻译

答案 1 :(得分: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是列表视图的标题