ListView 下拉回弹效果(类似知乎日报首页效果)
来源:互联网 发布:pollution 的数据 编辑:程序博客网 时间:2024/05/11 15:05
项目中需要做一个类似效果,就在StickyListHeaders的基础上写了一部分代码
效果图解释:
下拉,header中ViewPager中的图片变大,松开手,会有个回弹效果。
上代码:
public class HeaderListView extends StickyListHeadersListView {
private Scroller scroller; private int len = 50; private boolean scrollerType = false; private ViewPager viewPager; float startY; int bottom; public HeaderListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); scroller = new Scroller(context); } public HeaderListView(Context context, AttributeSet attrs) { super(context, attrs); scroller = new Scroller(context); } public HeaderListView(Context context) { super(context); scroller = new Scroller(context); } @Override public void addHeaderView(View v, Object data, boolean isSelectable) { viewPager = (ViewPager) v.findViewById(R.id.header); super.addHeaderView(v, data, isSelectable); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { float currentY = ev.getY(); Log.e("currentY", currentY + ""); Log.e("viewPager.getBottom()", viewPager.getBottom() + ""); switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: startY = currentY; bottom = viewPager.getBottom(); break; case MotionEvent.ACTION_MOVE: if (startY > bottom && viewPager.isShown() && viewPager.getTop() >= 0) { int y = (int) (bottom + (currentY - startY) / 2.5f); Log.e("ACTION_MOVE", "y =" + y); if (y < viewPager.getBottom() + len && y >= bottom) { viewPager.setLayoutParams(new RelativeLayout.LayoutParams(new RelativeLayout.LayoutParams(viewPager .getWidth(), y))); } scrollerType = false; } break; case MotionEvent.ACTION_UP: scrollerType = true; Log.e("ACTION_UP", "" + (bottom - viewPager.getBottom())); scroller.startScroll(viewPager.getLeft(), viewPager.getBottom(), 0 - viewPager.getLeft(), bottom - viewPager.getBottom(), 200); invalidate(); break; } return super.dispatchTouchEvent(ev); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev); } @Override public void computeScroll() { if (scroller.computeScrollOffset()) { int x = scroller.getCurrX(); int y = scroller.getCurrY(); viewPager.layout(0, 0, x + viewPager.getWidth(), y); if (!scroller.isFinished() && scrollerType && y > bottom) { viewPager.setLayoutParams(new RelativeLayout.LayoutParams(viewPager.getWidth(), y)); } invalidate(); } }}
Header中的ViewPager左右滑动和listView上下滑动有冲突,解决办法,自定义ViewPager,重写她的dispatchTouchEvent(MotionEvent ev)
public class CustomView extends RelativeLayout { public CustomView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { getParent().requestDisallowInterceptTouchEvent(true); return super.dispatchTouchEvent(ev); }}
明白思路,自己写个下拉刷新什么的应该就不是很难了。
demo:点我下载
参考:android 中文 api (64) —— Scroller
- ListView 下拉回弹效果(类似知乎日报首页效果)
- 自定义ListView实现下拉刷新和分页加载(效果类似知乎)
- Android实现ListView阻尼式(下拉回弹)效果
- Js实现点击查看全文(类似今日头条、知乎日报效果)
- 回弹效果listview
- Android 去掉ListView/GridView下拉出空白回弹的效果
- android 下拉回弹的效果
- 下拉放大及回弹效果
- Android ListView的回弹效果
- ListView 拉出回弹效果 overscroll,阻尼效果
- React-Native 知乎日报首页
- 实现拉绳效果(类似UC浏览器首页效果)
- android仿QQ下拉回弹效果
- android仿QQ下拉回弹效果
- ViewPager+下拉刷新ListView超强组合(实现360手机助手首页的效果)
- Android 去掉ListView下拉出空白回弹的效果so简单
- Android 去掉ListView/GridView下拉出空白回弹的效果,以及使用PullToRefresh出现的问题
- 在android4.1及之后版本如何恢复ListView/GridView下拉空白回弹的效果
- 三星笔试题目
- system.exit(0)和system.exit(1)的区别
- 那些支持我学习与工作的良师益友
- ubuntu12.04 错误:phonon: No such file or directory; phonon模块的安装
- linux的/etc目录下自己使用到的一些配置
- ListView 下拉回弹效果(类似知乎日报首页效果)
- 80个Python经典资料(教程+源码+工具)汇总——下载目录
- opencv 之写视频文件
- Ubuntu软件源列表
- zoj3696Alien's Organ (二项分布,泊松分布求近似值)
- ubuntu开启SSH服务
- Power BI for Office 365(五)Power View第二部分
- 最小生成树之prim算法
- Java关键字final和static总结