查看原文
其他

仿QQ空间之打造个性化可拉伸头部控件

2017-02-27 androidstarjack 终端研发部

androidstarjack的博客地址:

http://blog.csdn.net/androidstarjack/article/details/57524045

最近有研究了QQ空间可拉伸头部控件的listView。如何去做呢?这里使用了自定义listView的方法。先看效果图吧:

究竟如何去做呢? 可以用的方法有:

  • 1.继承 extends ViewGrop

  • 2.RecycleView +Behavior+CoordinateLayout

  • 3.ViewGroup 组合控件

  • 4.ListView + headView

这次我们主要用原生的自定义listView去做。

  • 1.extends 继承 ListView

  • 2.监听过度监听,在缩放头部图片重写overScrollBy方法

  • 重写onScrollChanged方法监听度放大时,执行缩小图片

  • 重写onTouchEvent方法,执行触摸时释放事件的处理

这里重写了方法 这里源码是怎么说的呢?

大致意思我们都可以看得出来.大致意思是响应于该视图中的内部滚动而调用的(即视图滚动其自己的内容)比如:eltaY < 0的时候下拉过度 对图片进行放大。 小于0时,上拉过度。

日前google上搜索“android overscroll”,对此效果的介绍很多,但关于其具体使用方式和实现,则很少涉及,偶有提及,也经常答非所问或似是而非,反而误导了别人。于是我查阅了android相关源码,并做了一些测试,在此讲讲我的理解。

首先是overscroll功能本身。

  • 在最顶层的View类提供了支持,可通过setOverScrollMode函数控制其出现条件。但其实View中并没有实现overscroll功能,

  • 提供了一个辅助函数overScrollBy,该函数根据overScrollMode和内容是否需要滚动控制最大滚动范围。

  • 最后将计算结果传给onOverScrolled实现具体的overscroll功能

  • 但此函数在View类中是全空的 overscroll功能真正的实现分别在ScrollView、AbsListView、HorizontalScrollView和WebView中各有一份,代码基本一样。

  • 以ScrollView为例,它在处理笔点移动消息时调用overScrollBy来滚动视图,然后重载了overScrollBy函数来实现具体功能,其位置计算通过OverScroller类实现。

  • OverScroller作为一个计算引擎,应该是一个独立的模块,具体滚动效果和范围都不可能通过它来设置,我觉得没有必要细看。但滚动位置最终是它给出的,那相关数据肯定要传递给它。

  • 回头看overScrollBy函数,它有两个控制overScroll出界范围的参数,几个实现里面都是取自ViewConfiguration.getScaledOverscrollDistance,而这个参数的值在我的源码中都是0,而且我没找到任何可以影响其结果的设置。

Activity中的代码:

xml布局

adapter适配器

adapter适配器请参考: 教你打造一个万能的适配器 item:布局


项目源码地址:http://blog.csdn.net/androidstarjack/article/details/57524045

如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809 微信公众号:终端研发部 

(欢迎关注学习和交流)


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存