Android项目实战之ListView悬浮头部展现效果实现

 更新时间:2022年01月27日 08:36:38   作者:传道士  
这篇文章主要给大家介绍了Android项目实战之ListView悬浮头部展现效果实现的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

实现效果:

先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数,关注数这一部分)在滑动到顶端的时候不消失,而是停留在整个界面头部。

我们先分析要解决的问题:

1、如何实现列表ListView顶部视图跟随ListView一起滑动

2、如何实现滑动过程中需要停留在顶部的视图

解决:

第一个问题,实现ListView与顶部视图一起滑动,ListView提供一个方法,addHeadView(View); 意思就是在ListView顶部添加一个View。那么这个View就能和ListView一起滚动。

第二个问题,怎么保证界面中间的某一部分视图滑动到顶部的时候停留在顶部呢?

首先我们这个停留在顶部的View(称为View1)是ListView.addHeadView()上去的,即滑动列表,这个View1会划出去,那么如何让它不划出去?只要在Listview所在布局最上方

也写一个同样的View(称为View2,View2和ListView同属于一个FragmentLayout)并先隐藏(Visible = 'gone'),当View1刚划出顶部的时候,View2显示。

View1刚划出顶部的时机就是:

当滑动时 firstVisibleItem>=要悬浮的 item的position时 让View2显示 ,否则隐藏。

代码实现:

首先布局文件:

头部布局:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="wrap_content"
 6     android:gravity="center"
 7     >
 8     <ImageView
 9         android:layout_width="match_parent"
10         android:layout_height="90dp"
11         android:src="@mipmap/p1"
12         android:scaleType="fitXY"
13         />
14 </LinearLayout>

要停留在顶部的View布局:(这里是要停留在顶部的View,这里addHeadView到ListView顶部,跟随者ListView滑动到顶部消失,这时满足firstVisibleItem>=要悬浮的 item的position条件,主界面里在写一个相同的View显示即可)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    >
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:src="@mipmap/p2"
            android:scaleType="fitXY"
            />
</LinearLayout>
复制代码

主布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:gravity="center"
        android:text="个人中心"
        android:textSize="20dp"
         />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >

        <ListView
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <LinearLayout
            android:id="@+id/invis"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:visibility="gone"
            >

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:src="@mipmap/p2"
                android:scaleType="fitXY"
                />
        </LinearLayout>
    </FrameLayout>
</LinearLayout>

java代码:

  private LinearLayout invis;
      private ListView lv;
      String[] strs;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          invis = (LinearLayout) findViewById(R.id.invis);
 
         strs = new String[100];
 
         for (int i = 0; i < 20; i++) {
             strs[i] = "data-----" + i;
         }
 
         lv = (ListView) findViewById(R.id.lv);
         View header = View.inflate(this, R.layout.stick_header, null);//头部内容
         lv.addHeaderView(header);//添加头部
 
         lv.addHeaderView(View.inflate(this, R.layout.stick_action, null));//ListView条目中的悬浮部分 添加到头部
 
         lv.setAdapter(new ArrayAdapter<String>(this,
                 android.R.layout.simple_list_item_1, strs));
         lv.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 (firstVisibleItem >= 1) {
                     invis.setVisibility(View.VISIBLE);
                 } else {
 
                     invis.setVisibility(View.GONE);
                 }
             }
         });
     }

总结

到此这篇关于Android项目实战之ListView悬浮头部展现效果实现的文章就介绍到这了,更多相关Android ListView悬浮头部展现内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Flutter实现局部刷新

    Flutter实现局部刷新

    这篇文章主要为大家详细介绍了Flutter实现局部刷新,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • Android 8.0如何完美适配全局dialog悬浮窗弹出

    Android 8.0如何完美适配全局dialog悬浮窗弹出

    这篇文章主要给大家介绍了关于Android 8.0如何完美适配全局dialog悬浮窗弹出的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧
    2018-07-07
  • Android实现ListView异步加载图片的方法

    Android实现ListView异步加载图片的方法

    这篇文章主要介绍了Android实现ListView异步加载图片的方法,以实例形式较为详细的分析了Android中ListView异步加载图片的原理与相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android实现视频播放--腾讯浏览服务(TBS)功能

    Android实现视频播放--腾讯浏览服务(TBS)功能

    TBS视频播放器可以支持市面上几乎所有的视频格式,包括mp4, flv, avi, 3gp, webm, ts, ogv, m3u8, asf, wmv, rm, rmvb, mov, mkv等18种视频格式。这篇文章主要介绍了Android实现视频播放--腾讯浏览服务(TBS),需要的朋友可以参考下
    2018-07-07
  • Android中TextView实现垂直滚动和上下滚动效果

    Android中TextView实现垂直滚动和上下滚动效果

    这篇文章主要介绍了Android中TextView实现垂直滚动效和上下滚动效果,需要的朋友可以参考下
    2017-04-04
  • View触发机制API实现GestureDetector OverScroller详解

    View触发机制API实现GestureDetector OverScroller详解

    这篇文章主要为大家介绍了View触发机制API实现GestureDetector OverScroller详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 使用kotlin协程提高app性能(译)

    使用kotlin协程提高app性能(译)

    这篇文章主要介绍了使用kotlin协程提高app性能(译),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Android控件之ToggleButton的使用方法

    Android控件之ToggleButton的使用方法

    本篇文章介绍了,Android控件之ToggleButton的使用方法。需要的朋友参考下
    2013-04-04
  • Android Flutter制作一个修改组件属性的动画

    Android Flutter制作一个修改组件属性的动画

    flutter为我们提供了一个AnimationController来对动画进行详尽的控制,不过直接是用AnimationController是比较复杂的,如果只是对一个widget的属性进行修改,可以做成动画吗,本文就来探讨一下
    2023-05-05
  • Android Drawable代码编写的新姿势分享

    Android Drawable代码编写的新姿势分享

    Drawable是什么?按照字面翻译,就是可绘制的,由于能够绘制的东西很多,所以这个类是一个抽象类,下面这篇文章主要给大家介绍了关于Android Drawable代码编写的新姿势,需要的朋友可以参考下
    2022-01-01

最新评论