美文网首页Android技术知识Android开发Android开发经验谈
QQ 未读消息的拖拽动态效果是如何实现的?

QQ 未读消息的拖拽动态效果是如何实现的?

作者: Android开发架构 | 来源:发表于2018-12-17 17:30 被阅读2次

    作者:祥子

    链接:https://www.zhihu.com/question/37231903/answer/139438769

    来源:知乎

    这个效果就是贝塞尔曲线的一种应用,这里我就用安卓代码实现一下。

    我们把这个东西的效果拆解一下

    A,B是两个圆形,AB之间是一个由abcd四条path围成的动态的C区域,其中bd两条贝塞尔曲线有公有控制点e,e是ac圆心之差/2;

    核心逻辑:一开始的时候 ,A,B的圆心是重合的,随着A,B距离增加,A的直径变小,带来C区域视觉上的拉长,到达一定距离后,B随着一段帧动画消失,A的直径变为0消失;

    首先,自定义一个View后,建立核心参数:

    第一步:计算获得两个圆心之间的动态距离distance,并通过距离来控制A圆的大小;

    第二步:求取贝塞尔曲线控制点e的动态坐标与1,2,3,4四点动态坐标:

    1、获得A,B圆之间的偏移量

    2、有了偏移量就可以求出圆心两点斜率了

    有了斜率,圆心坐标和直径,就可以通过计算获得1,2,3,4 四个点的动态实时坐标;

    第三步:现在核心参数都已经计算获得,就可以用画笔画出中间C图形的path了,path由3→4→2→1顺序画出;

    第四步:所有部件都准备好,现在只要写出onTouchEvent中的逻辑;

    1、ACTION_DOWN按下时

    2,ACTION_MOVE手指移动时

    3,ACTION_CANCEL抬起手指时

    OK。完成,运行一下看看效果

    完成

    源码我放在百度云盘了,

    说实话,像这种漂亮的小控件,做出来不是很难,难的是创意,想出这个idea的设计师才是宝贝。

    希望今天的文章你能喜欢。

    私信我可获取更多有关安卓开发的资料!

    相关文章

      网友评论

        本文标题:QQ 未读消息的拖拽动态效果是如何实现的?

        本文链接:https://www.haomeiwen.com/subject/ncpckqtx.html