天天看点

android控件的touch事件_Android 仿微信朋友圈图片拖拽返回

本文作者

作者:bauerbao

链接:

https://www.jianshu.com/p/2d30934229e9

本文由作者授权发布。

看到作者这篇文章,有种使用ViewDragHelper的感觉,封装思路还是非常值得学习的!

1 概述

目前的app的动画效果是越来越炫了,很多主流app的图片预览返回都有类似功能,比较常见的是ios自带相册,微信朋友圈等等。自己项目中也有类似功能,最近整理了一下这个功能的代码,做个笔记记录,有兴趣的朋友可以点击源码。

https://github.com/bauer-bao/DragCloseHelper

网上已经有对应功能的三方库了,MyDragPhotoView  和 DragPhotoView等等。

https://github.com/MrBoudar/MyDragPhotoView

https://github.com/githubwing/DragPhotoView

但是他们都是继承view去实现的。如果我想用到其他View/ViewGroup上,就不是很方便,需要重新自定义view,然后复制黏贴和修改。因此就有了这篇文章,这个效果可以加在任意View或者ViewGroup上。

效果图:

一般经常用到这个功能的,莫非就是图片预览和视频预览了。

android控件的touch事件_Android 仿微信朋友圈图片拖拽返回

视频控件效果

android控件的touch事件_Android 仿微信朋友圈图片拖拽返回

图片控件效果

2 使用步骤

1.activity主题设为透明

2.初始化

3.如果是共享元素启动的页面,需要如下设置(强烈建议和共享元素一起使用,否则是没有灵魂的)

4.设置需要进行拖拽的View/ViewGroup,以及背景ViewGroup(必须要设置背景色)

5.设置监听

6.处理touch事件

7.可以自定义最大拖拽距离和最小缩放尺寸

setMaxExitY(int maxExitY)
setMinScale(@FloatRange(from = 0.1f, to = 1.0f) float minScale)
           

3原理

很简单,就是touch事件传递,相信大家都已经滚瓜烂熟了。

大概步骤:

1.检测是否有拦截

2.ACTION_DOWN事件,初始化数据

3.ACTION_MOVE事件,如果多手指或者手指Id不一致,则复原,否则开始移动,同时更新拖拽View/ViewGroup的位置和大小。

4.ACTION_UP事件,判断是否超过指定的最大距离,如果超过,开始关闭动画,否则开始复原动画

核心代码如下:

源码:

https://github.com/bauer-bao/DragCloseHelper

参考资料

https://github.com/MrBoudar/MyDragPhotoView

推荐阅读:

Flutter豆瓣客户端(仿),诚心开源

Android 你可能错过的信息 |  2 期

送个学习Android的技巧给你!

android控件的touch事件_Android 仿微信朋友圈图片拖拽返回

扫一扫 关注我的公众号

如果你想要跟大家分享你的文章,欢迎投稿~

┏(^0^)┛明天见!

继续阅读