本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发
原文链接:http://blog.csdn.net/u013045971/article/details/52119117
前景提要:
什么是块切?
快切是从猎豹的Clear Master中分离出来的一个悬浮窗小工具。因为对这个比较感兴趣,博主断断续续花了2个月时间完成了一个类似块切的版本,起了个名字叫“Well Swipe”,中文名叫“Well 划划”。本文会针对Well 划划开发中遇到的一些坑和和技巧做一个分享。来给大家揭密块切开发过程中用到的自定义控件技术细节。在这里还有一个叫“单手划划”的app不得不说,也做的很好。
块切长啥样子?
酷安下载地址:http://www.coolapk.com/apk/com.well.swipe
效果图:http://blog.csdn.net/u013045971/article/details/50217903
Well 划划的gif效果图:https://github.com/gumingwei/WellSwipe/blob/master/app/wellswipe5.gif
问题:
- 如何触发菜单
- 如何通过手势控制菜单的旋转,打开,关闭
- 旋转的过程中如何做到item循环展示
- 拖动item效果
- 拖动item时的排序效果
- item的过渡动画(删除一个item之后,剩余的item会自动平移到目标位置。拖动排序时item自动平移到排序之后的位置)
- 控件之间如何交互(旋转菜单的时候指示器跟着转,拖动的时候角落菜单变化状态,拖动到垃圾箱)
- 重写的onItemClick,onItemLongClick事件
打开:打开这个手势在底部L型的触发区域进行。设计的时候分左右。所以写的时候也要分左右,当手指划过一定距离之后就开始打开菜单,手指这个时候还没停,手指继续滑动的时候计算一个0-1的值用来控制菜单从小到大展开的效果。我设计了这样的一个接口,把需要的scale值回传到菜单view来使用
/**
* Created by mingwei on 3/12/16.
*
*
* 微博: 明伟小学生(http://weibo.com/u/2382477985)
* Github: https://github.com/gumingwei
* CSDN: http://blog.csdn.net/u013045971
* QQ&WX: 721881283
*
*
*/
public interface OnScaleChangeListener {
/**
* 当scale发生变化的时候回传这个值
* <p/>
* 1.用于在手指拖动时: CatchView.OnEdgeSlidingListener
* 2.松开手指时自动打开和关闭的过程中: AngleLayout.OnOffL