Android - 开源库Android-AbsListView-Drag-And-Drop

概述

魅族的滑动选择和拖拽删除是很棒的交互, 但是Flyme5上去掉了这一特性, 魅族源码中实现滑动选择是在ListView源码中修改的, 这样也是最好的方式, 我花了点时间使用了些黑科技继承ListView的方式实现, 这样可以在任何Android手机上使用这种交互方式.

看看效果

原生ActionMode

自定义SelectionAttacher

滑动选择

实现原理

  1. Drag,Drop的实现方式
    这里是使用弹窗的方式实现: 长按的时候获取当前item的视图并转换成一张图片, 同时弹一个悬浮窗, 把这个图片作为悬浮窗的背景, 然后跟着手指移动, 如果手指移动到Menu的区域则改变颜色, 此时放下,则回调Drop方法.
    注: 这里需要指出的是悬浮窗的弹出方式是, 先弹了一个全屏的Layout, 真正可见的悬浮窗是该Layout的子视图, 这样做的目的是优化动画效果, 如果不这样做, 悬浮窗滑动到边缘会有视图绘制掉帧的情况(计算器悬浮窗就有这个问题)
  2. 多选模式的自定义SelectionAttacher
    由于是继承于ListView, 为了扩展一些功能, 就没有使用原生的ActionMode和原生的多选模式, 使用CHOICE_MODE_MULTIPLE来模拟了CHOICE_MODE_MULTIPLE_MODAL .
    这里SelectionAttacher包含HeaderTransformer和FooterTransformer支持自定义, 可以实现Flyme5.0的交互.Transformer添加到Activity的DecorView中.
  3. 滑动选择
    滑动选择是实现Google I/O 2015发布的Photos的交互, 实现起来也很简单, 就是多选长按滑动后, 去选中滑动掠过的item. 自定义Layout 重写setActivated方法, 来实现缩放动画

代码

https://github.com/gavinliu/Android-AbsListView-Drag-And-Drop

Gavin Liu wechat
欢迎您扫一扫上面的二维码,订阅我的微信公众号!