android 悬停 listview,iOS转android之listview悬浮效果

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

如果悬浮部分是在最上边

那么很简单,先看view1

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">

android:id="@+id/listviewHeader"

android:layout_width="match_parent"

android:layout_height="100dp"

/>

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

android:id="@+id/springView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#ffffff">

android:layout_width="match_parent"

android:layout_height="wrap_content"

>

android:id="@+id/customerListView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:divider="#00000000"/>

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">

android:id="@+id/listviewHeader"

android:layout_width="match_parent"

android:layout_height="100dp"

android:gravity="center"

android:textColor="#111111"

android:text="悬浮部分"/>

java代码

listView = contentView.findViewById(R.id.customerListView);

View headerView = View.inflate(getContext(),R.layout.listview_headerview,null); //占位headerview

listView.addHeaderView(headerView);

23a774f6875f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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悬浮效果,请看效果图

23a774f6875f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

item悬浮效果图

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值