美文网首页
iOS转android之listview悬浮效果

iOS转android之listview悬浮效果

作者: 移动端_小刚哥 | 来源:发表于2019-01-21 17:00 被阅读100次

    相信从事iOS开发的人都使用过cell悬浮效果,在Android开发中系统没有提供这种效果,于是我们要手动实现,大概思路就是在listview上面添加一个view1,在listview的headerview中添加一个相同的view2,根据条件来判断显示view1还是view2,说的不是很清楚,看代码

    如果悬浮部分是在最上边

    那么很简单,先看view1

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        android:id="@+id/invis"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:orientation="horizontal">
    
        <TextView
            android:id="@+id/listviewHeader"
            android:layout_width="match_parent"
            android:layout_height="100dp"
           />
    
    </LinearLayout>
    

    view2,这是一个包含上拉和下拉的效果,如果不需要可以直接删除SpringView

        <!--带上拉和下拉的列表-->
        <com.liaoinstan.springview.widget.SpringView
            android:id="@+id/springView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#ffffff">
    
    
            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                >
    
                <ListView
                    android:id="@+id/customerListView"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:divider="#00000000"/>
    
    
                <LinearLayout
                    android:id="@+id/invisOuts"
                    xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#999999"
                    android:visibility="visible"
                    android:orientation="horizontal">
    
                    <TextView
                        android:id="@+id/listviewHeader"
                        android:layout_width="match_parent"
                        android:layout_height="100dp"
                        android:gravity="center"
                        android:textColor="#111111"
                        android:text="悬浮部分"/>
    
                </LinearLayout>
    
            </FrameLayout>
        </com.liaoinstan.springview.widget.SpringView>
    

    java代码

            listView = contentView.findViewById(R.id.customerListView);
    
            View headerView = View.inflate(getContext(),R.layout.listview_headerview,null); //占位headerview
            listView.addHeaderView(headerView);
    
    Android效果

    还是有一些问题的,上拉的时候悬浮部分跟着向上滑动了,目前我解决不了😂,期待大神给出思路或者解决方案🙏。
    可以看到view1只是用来占位的,真正展示的是和listview平级的这个view2。如果悬浮部分是在顶部那么代码很简单,不需要判断任何东西,直接放在最上边作为headerview就可以了,但是如果悬浮部分不是处在最上边该怎么处理呢??如果悬浮部分是中间部分的一个cell呢??

    如果悬浮部分是中间部分的一个cell

    那么需要给listView增加一个监听器

    final ViewGroup viewGroup = (LinearLayout)contentView.findViewById(R.id.invisOuts);
            listView.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){
                        viewGroup.setVisibility(View.VISIBLE);
                    }else {
                        viewGroup.setVisibility(View.GONE);
                    }
                }
            });
    

    具体要实现哪一个itme悬浮效果可以在onScroll方法中来判断firstVisibleItem的值,假如我要实现第二个item悬浮效果,请看效果图

    item悬浮效果图

    悬浮部分和实际部分使用同一套布局,传入同一份数据,那么效果上看起来就是iOS的那种悬浮效果了

    参考文章
    http://www.cnblogs.com/xqxacm/p/5642063.html
    https://blog.csdn.net/wenzhi20102321/article/details/70186040

    相关文章

      网友评论

          本文标题:iOS转android之listview悬浮效果

          本文链接:https://www.haomeiwen.com/subject/eeocjqtx.html