仿Airbnb首页的实现
2016-09-19 09:56
621 查看
这几天项目进行改版,将首页变成Airbnb那种左右滑动的形式。
由于刚开始想错了方向,使用RecyclerView来实现,后面发现和想象中的不一样,RecyclerView是一条线,而viewpager是一个个点的连接。
所以用SwipeRefreshLayout{ScrollView{Viewpager}}来实现。
在滑动冲突这边之前查看了很多demo,最后通过重写dispatchTouchEvent对初试位置和滑动的X、Y进行判断,在Move的时候进行判断,我这边是根据滑动的距离进行判断,再通过getParent().requestDisallowInterceptTouchEvent(false),false是代表父view拦截滑动,true的话是禁止父view拦截。
在滑动到第二个到倒数第二个的时候,两边会显示上一个和下一个的对象,这里的话是需要在viewpager中设置margin,自定义ChildViewPager继承Viewpager,布局属性如图。
由于adapter,没有显示在页面上的对象是不会加载的,所以在滑动的时候,滑到下一个页面才会加载下下个对象,为了更好的用户体验,这里可以在初始化viewpager的时候加上:
我这边默认的缓存大小是2,意味着在加载的时候会默认缓存两个对象,由于上一个对象未滑出屏幕,而且已加载完成,所以当滑动到下个页面的时候,下下个对象就已经存在,这样用户在使用的时候能够更舒适。
如果首页数据量比较大的话,可以考虑在第一次拉数据的时候,将数据存入缓存,init的时候将上一次数据载入进去,等本次数据加载完再更新。
~~~~~
由于刚开始想错了方向,使用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的时候将上一次数据载入进去,等本次数据加载完再更新。
~~~~~
相关文章推荐
- 爬虫:Scrapy13 - 发送 email
- alter table *** add constraint
- dataTables-details 1.9
- 在ubuntu 12.04 RTAI 下安装LABVIEW
- Grails 快速入门(一)
- Constraint where both columns cannot be null, but one can
- AlDl跨进程服务之电话拦截
- 黑苹果El Captain 10.11.2 安装
- hdu 1022 Train Problem I(栈)
- Unbuntu上编译安装搭建Kamailio sip服务端详细步骤
- 1205:Lock wait timeout exceeded; try restarting transaction
- http://www.roncoo.com/article/detail/124661
- HDU2476-String painter
- container_of宏介绍
- hdu1702 ACboy needs your help again!(栈和队列
- [Leetcode] Contains Duplicate II
- 【BZOJ-1260】涂色paint 区间DP
- Unable to authenticate: Fail to create new session
- 【转】INSTALL_FAILED_NO_MATCHING_ABIS 的解决办法
- ld: 1 duplicate symbol for architecture *** clang: error: linker command failed 4000 with exit code 1 (u