仿QQ未读消息拖拽效果

仿QQ未读消息拖拽效果

技术参考文章

贝塞尔曲线介绍

Android自定义控件:类QQ未读消息拖拽效果

补充说明

Android自定义控件:类QQ未读消息拖拽效果,这篇文章在求解A,B,C,D四个点上不尽详述,所以下面进行补充说明。

图示:

仿QQ未读消息拖拽效果_第1张图片

计算过程:

仿QQ未读消息拖拽效果_第2张图片

技术总结

  1. 计算A,B,C,D四点坐标
  2. 了解拖拽过程连接固定圆和拖拽圆之间的曲线实现,即贝塞尔曲线
  3. 如何让QQDotView拖拽区域为整个屏幕?使用WindowManager的addView方法,把QQDotView添加到Window上。
  4. WindowManager.LayoutParams设置format为PixelFormat.TRANSLUCENT,背景为半透明。View添加到特定坐标位置时,需要设置gravity=Gravity.LEFT | Gravity.TOP,否则View添加的位置会不正确。
  5. 使用事件代理,将固定点的触摸事件代理给QQDotView。
  6. 在ListView中拖动圆点ListView可能会发生滚动,在QQDot按下时调用requestDisallowInterceptTouchEvent(true),不允许父容器拦截事件。
  7. 在ListView中由于View复用,在滚动后固定点坐标没有更新。重写QQDot的dispatchTouchEvent(MotionEvent ev)方法,更新固定点坐标。
  8. 回弹动画,使用translationX,translationY属性动画。
  9. 消失动画使用帧动画。

完整例子

demo链接

你可能感兴趣的:(android)