锤子便签探究之拖拽效果的实现猜想

博客主要探讨了在编辑器中实现拖拽功能的各种尝试和问题,从系统startDrag的局限,到viewdraghelper和recyclerview的不足。作者通过研究锤子便签的拖拽效果,提出了可能的实现方式,涉及UI布局的变化、触摸事件的处理以及坐标转换的计算。最终,作者在项目中实现了类似的效果。
摘要由CSDN通过智能技术生成

最近编辑器里涉及到item拖拽,遂各种尝试

首先尝试了系统startDrag,发现效果根本不理想,因为你无法控制左右上下拖动,而且他的阴影没法改。。。放弃

然后用viewdraghelper实现了下,当然viewdraghelper也很强大,但是一直没搞明白该如何长按触发拖拽,还有一点就是viewdraghelper切换位置会导致拖拽的item位置也发生变化。。。继续放弃

再然后用了recyclerview的拖拽,哇,很流畅啊有木有,但是recyclerview的拖拽有问题,那就是在item中间做item交换的话如果item在最下面,这时候你交换了位置,会导致你正拖拽的item消失。。。再次放弃


。。。好了事情到这就不知道怎么搞了,去研究了下其他编辑器,找了一圈,发现锤子的拖拽效果做的特别棒

于是乎想研究下他们是怎么实现的,毕竟参考吗,首先想到的那当然是反编译,哎,可是,你懂的,代码做了混淆了,啥都看不懂

那那那代码混淆了,看起来太费劲了,还有办法吗?

答案是有滴,那就是

神器都祭出来了,当然是看ui啊


首先截了两张图

第一张:正常状态下锤子ui布局



第二张:拖拽情况下锤子ui布局




你发现了什么?

拖拽情况下竟然有两个listview?什么鬼?正常情况下所有文字是在一个edittext里面的,拖拽情况下会把所有的edittext每一行拆成一个view,当然,这不在我要研究的范围内,不做讨论


我只是要研究他的拖拽怎么实现的,如果你也看了锤子ui布局,你会发现拖拽的那个view你是选不中的

????选不中?什么情况下会选不中?那就是他没有布局,canvas直接draw上去的(猜测)


然后有了猜测,就实验吧

当然实验详细过程就省略了,大体说一下我的流程

首先我没有用listview,直接拿linearlayout来做的实验,毕竟实验吗,怎么简单怎么来

我们要做的无非就是重写onTouch事件,在长按的时候,隐藏掉原来的view,然后在scrollview的父布局A中动态draw上我们选中的那个view,然后在你需要触发拖拽的子view中拦截一下touch事件

唯一的难点就在坐标的计算上,scrollview里那个布局B(linearlayout或者你其他的container)中子布局的相对B的位置和相对A的位置的转换,废了很大劲,其他都不难


最终实现效果如下,大体差不多,终于可以拿到项目里用了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值