ListView 列表悬浮

      项目中要实现Listview中的第一行向上滑动的过程中,随着向上滑动,用户永远可以看到第一行悬浮在屏幕上方。

      实现这种效果,主要是监听listview 的滑动事件判断当第一行滑出屏幕后,如何显示第一行的问题。当第一行滑出屏幕后,用户看到的其实是另外一个布局,原来的listview的第一行,其实随着滚动,用户已经看不见了。

     1.整个页面的代码布局

   
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">



    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        
        <!--使用的是开源的下拉刷新框架 -->
        <in.srain.cube.views.ptr.PtrClassicFrameLayout
            android:id="@+id/rotate_header_list_view_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            cube_ptr:ptr_duration_to_close="200"
            cube_ptr:ptr_duration_to_close_header="1000"
            cube_ptr:ptr_keep_header_when_refresh="true"
            cube_ptr:ptr_pull_to_fresh="false"
            cube_ptr:ptr_ratio_of_header_height_to_refresh="1.2"
            cube_ptr:ptr_resistance="1.7">

            <com.esky.echat.common.widget.ultrapulltorefresh.UltraRefreshListView
                android:id="@+id/rotate_header_list_view"
                style="@style/listview_style"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:choiceMode="singleChoice"
                android:fadingEdge="none"
                android:scrollbarStyle="outsideOverlay" />

        </in.srain.cube.views.ptr.PtrClassicFrameLayout>
    </LinearLayout>


    <include layout="@layout/fragment_base_empty"></include>
    <!--用户看到的悬浮在屏幕上方的布局,与listview 第一行布局一致 -->
    <include layout="@layout/listitem_livevideo_contribution_first"
        android:visibility="gone"></include>

</RelativeLayout>

     2.监听滑动事件

@Override

    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        Log.e(TAG, "firstVisibleItem = " + firstVisibleItem);
        if (firstVisibleItem >= 1) {
            hideLayout.setVisibility(View.VISIBLE);
            Log.e(TAG, "hideView.setVisibility(View.VISIBLE) ");
        } else {
            hideLayout.setVisibility(View.GONE);
            Log.e(TAG, "hideView.setVisibility(View.GONE) ");
        }
    }
   上面使用的是 firstVisibleItem >= 1 来进行显示的。 如果 使用firstVisibleItem >= 0,那么在页面一开始显示的情况下,额外的悬浮布局就显示了,那么在滑动的过程中,明显的会看到两个同样的item。为了避免这种情况,mListView.addHeaderView(headView) ,而headview 可以是一个1px的透明布局。
       现在看起来是不是很简单了。




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值