仿Airbnb首页的实现

项目改版中,采用SwipeRefreshLayout包裹ScrollView和Viewpager实现类似Airbnb首页的左右滑动效果。解决滑动冲突问题,通过重写dispatchTouchEvent进行判断。在ChildViewPager中设置margin展示相邻对象。为优化用户体验,初始化时预加载部分数据,大数据量场景可考虑缓存策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天项目进行改版,将首页变成Airbnb那种左右滑动的形式。

由于刚开始想错了方向,使用RecyclerView来实现,后面发现和想象中的不一样,RecyclerView是一条线,而viewpager是一个个点的连接。

所以用SwipeRefreshLayout{ScrollView{Viewpager}}来实现。

在滑动冲突这边之前查看了很多demo,最后通过重写dispatchTouchEvent对初试位置和滑动的X、Y进行判断,在Move的时候进行判断,我这边是根据滑动的距离进行判断,再通过getParent().requestDisallowInterceptTouchEvent(false),false是代表父view拦截滑动,true的话是禁止父view拦截。

在滑动到第二个到倒数第二个的时候,两边会显示上一个和下一个的对象,这里的话是需要在viewpager中设置margin,自定义ChildViewPager继承Viewpager,布局属性如图。

<com.estay.apps.client.choice.ChildViewPager
    android:id="@+id/xxx"
    android:clipChildren="false"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="22dp"
    android:layout_marginRight="15dp">
</com.estay.apps.client.choice.ChildViewPager>

由于adapter,没有显示在页面上的对象是不会加载的,所以在滑动的时候,滑到下一个页面才会加载下下个对象,为了更好的用户体验,这里可以在初始化viewpager的时候加上:

mHotApartmentView.setOffscreenPageLimit(2);
我这边默认的缓存大小是2,意味着在加载的时候会默认缓存两个对象,由于上一个对象未滑出屏幕,而且已加载完成,所以当滑动到下个页面的时候,下下个对象就已经存在,这样用户在使用的时候能够更舒适。

如果首页数据量比较大的话,可以考虑在第一次拉数据的时候,将数据存入缓存,init的时候将上一次数据载入进去,等本次数据加载完再更新。

~~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值