【问题标题】:Android - Scroll/Move the ListView itselfAndroid - 滚动/移动 ListView 本身
【发布时间】:2014-09-11 13:57:12
【问题描述】:

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

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

执行此操作的应用示例如下:Google Play StoreHuffington Post强>,YouTube

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

【问题讨论】:

  • 他们只有一个图片大小的空标题
  • @tyczj 然后他们会在用户向下滚动时慢慢减小标题的大小吗?我假设?
  • 没有减少任何东西,标题保持不变,图像在列表视图下方
  • 当然。抱歉……我现在和你在一起。谢谢。我现在就试试,如果你做出来,我会在答案上注明。
  • 我想你可以在滚动标题时翻译图像,但这似乎是额外的工作

标签: android listview scroll offset


【解决方案1】:

这有点视觉上的诡计,看起来图像和列表是一体的,但实际上并非如此。

基本上,您有一个列表视图,其标题视图与图像大小相同,并且在列表视图下方您有您的图像,因此当您滚动它时,列表视图会在图像上滚动。

布局看起来像这样

<RelativeLayout>

    <ImageView></ImageView>

    <ListView></ListView>

</RelativeLayout>

为带有图像视图大小的空标题创建另一个布局

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

【讨论】:

    【解决方案2】:

    您需要在列表视图中添加标题。你可以这样做:

    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是列表视图的标题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多