zoukankan      html  css  js  c++  java
  • WPF水珠效果按钮组

    抖动动画

    由于圆是被12个点控制的,让圆抖动,也就是对12个点做点动画

    可以用关键帧动画,这样控制的比较细致,要注意的是,衔接的地方要平滑.我这里做的比较简陋,就找了一个变换后的图形,重复了5次.如果你有兴趣,可以多做些,做的越多,动画看起来表现力越强

    这里我并没有去研究什么算法,就是简单的在blend里,找了一些点

    见代码:

     View Code

    item

    按钮的位置

    不管是奇数个,还是偶数个,我们都想让它以Y轴对称

    首先把圆分成8等份,每一份都是45度,也就是最多只能放下8个item,

    从上图可以看出来,其实就是奇数个在线上,偶数个在两线之间

    有个简单的办法,就是先在顶点依次顺时针排列,每个item间隔45度,然后再逆时针旋转,每多一个item就多转45/2度(两条分割线是45度,中间也就是45/2度),如下图:

     上图是item终点的位置,起点的位置是在圆心.

    动画用DoubleAnimation控制item按钮的位移,从圆心移动到计算后的位置

     计算位置的代码:

    1 //函数是弧度制 2PI是360度
    2 1 a = c * Math.Sin(2 * Math.PI / 8 * i - (itemsSource.Count - 1) * 2 * Math.PI / 8 / 2);
    3 2 b = c * Math.Cos(2 * Math.PI / 8 * i - (itemsSource.Count - 1) * 2 * Math.PI / 8 / 2);
    水球连接的部分

    连接的部分是用两个二次贝塞尔和一条直线做一个path

    开始的时候,两条贝塞尔曲线的高度是0,控制点在path所在矩形的边上,然后对而塞尔曲线上面的点和控制点做动画,分别向上和内移动,最终形成上图右边的图形,然后把这个动画和item按钮向外部移动的动画结合起来,就伪装成了水球分离的效果.

     上图红色矩形就是连接部分的path.动画的过程就是Item按钮的直径和大圆相交的时候开始和item按钮一起做动画,最后移动到Item按钮直径所在的位置,整个距离就是Item的半径+item到主体的距离+蓝色的d,而蓝色的d可以通过公式求出

    开始的时候也是让连接部分path在圆心的位置.定位方法和定位Item按钮的方法是完全一样的.这里就不在重复了.只说一下c边的距离是:大圆和小圆圆心的距离-连接path高度的一半

    源码下载:WaterDropsButtonGroup.zip 

    参考连接:

    1. https://en.wikipedia.org/wiki/B%C3%A9zier_curve
    2. https://baike.baidu.com/item/%E8%B4%9D%E5%A1%9E%E5%B0%94%E6%9B%B2%E7%BA%BF/1091769?fr=aladdin
    3. https://www.cnblogs.com/ArthurQQ/articles/1730214.html
    4. http://blog.csdn.net/chouglas/article/details/50967566
     
    分类: WPF
  • 相关阅读:
    tcpdump命令
    浅谈  curl命令
    MongoDB下rs.status()命令
    Device mapper存储方式
    top命令
    cat命令汇总整理
    centos7搭建nginx日志
    CentOS7 防火墙(firewall)的操作命令(转)
    服务器的硬件组成
    shell随机生成10个文件
  • 原文地址:https://www.cnblogs.com/ExMan/p/8056994.html
Copyright © 2011-2022 走看看