android学习日记:竖向滑动特效之snakeview

最近看到一篇帖子,是关于滑动的同时修改滑动图片大小的。原文的链接已经找不到了,感谢下作者给出的源码。这里对这部分的内容进行简单的分析记录。

效果图:

首先是思路:

要实现如图的效果,使用listview肯定是会有很大问题的,因为listview中所有item的布局宽度都是一致的,而且无法让下一个item覆盖一部分的现在item,即使在framework层对listview或者其父类abslistview进行修改,估计也很难做到。所以在这里framelayout应该是最好的选择。源码中就是继承了一个framelayout从而做出该效果的。

主要的文件只有两个,主Activity以及自定义布局snakelayout:

1.主Activity:为snakelayout提供数据,设置监听listener,启动自定义布局的入口函数init。

2.自定义布局snakelayout:

源码有1000多行,总体的思路大致是这样的:

自定义个一个内部view类SnakeView,然后用这个自定义的view类对象显示在主界面中。滑动时图片的改变过程实际上也就是这个自定义的view类重绘的过程。

自定义一个PathScale类,用来进行滑动过程中图片坐标随滑动改变而改变的处理。根据方向,滑动速度来确定SnakeView中重绘图片的具体坐标。

自定义的OnGestureListener,对手势进行相关处理。

在初始init时会加载默认的布局文件,并根据主Activity给出的资源来显示图片。之后,一旦进行了手势操作,就会将原有的view设置为不可见,然后剩下的界面显示工作就交给自定义的SnakeView来进行。这些都是在ondown中完成的,在ondown的同时还会不停的给SnakeView中添加新的view。当ondown结束之后会立马进入到dispatchDraw中,然后在dispatchDraw里面画出界面。

代码中最繁琐的地方应该就是PathScale这个类了,需要进行很多运算,而且比较麻烦。这里就不做数学分析了。

至于手势的分发处理,也是非常基本的东西,源码中简单明了。

缺点:

这个demo在图片的尺寸设定比较小的时候运行是很流畅的,但是如果图片的尺寸设置为源码的两倍以上时就会有明显的卡顿。因为所有的bitmap添加都是在ondraw函数中进行的。而这会严重的影响到程序运行的流畅程度。另外一个弊端就是这个demo只能对图片进行处理,如果将bitmap换成view,会非常的耗费资源。之后又尝试使用android自带的stackview,可以完美解决这些问题,不过大小位置滑动处理等问题又出现了。

源码地址:点击打开链接



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值