Android_正弦波动画

自定义View中的正弦波绘制以及动画技巧

这里写图片描述


正弦波公式:

ƒ(x) = a * sin(x + x0) + b
公式中:
a: 决定正弦函数振动幅度的大小;
x0:表示x开始比0拖后的弧度值;
b:表示函数偏离X轴的距离;

上述描述来自百度百科,因为本人数学也是渣渣

OK,下面我们来看下GIF中正弦波在Android中的绘制以及动画

目标 一: 绘制静态的正弦曲线,
  正弦曲线可以看成上述公式中,无数个在 函数ƒ(x) = a * sin(x + x0) + b 中的点连起来的点,点构成了线条

            在Android中,我们可以用canvas中的API, 
            public void drawLine(float startX, float startY, float stopX, float stopY,
        @NonNull Paint paint) {
    native_drawLine(mNativeCanvasWrapper, startX, startY, stopX, stopY, paint.getNativeInstance());
}

绘制直线的方法来找出view的宽度范围内,所有符合fx正弦波函数的点
这样静态的静态曲线就绘制出来了,

然后就是然正弦波静态的,动起来,
无线动的实现,利用属性动画驱动器valueanimitor来实现

    public void waveAnim() {
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0F, 1.F);
        valueAnimator.setDuration(2000);
        valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
        valueAnimator.setInterpolator(new LinearInterpolator());
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                Float aFloat = Float.valueOf(animation.getAnimatedValue().toString());
                //核心代码,重要的是在动画的过程中改变正弦波的相位,从0到360无限变化就可以实现正弦波的移动
                wavePhase = 360.F * aFloat;
                invalidate();
            }
        });
        valueAnimator.start();
    }

这样就结束了,总要的在这里,源代码下载地址:

https://github.com/GuoFeilong/BehivorDemo

源代码里面有几个自定义view和博客同用了当前项目,所以进到github界面不要看readme和当前博客不一样就放弃了,看下提交记录,源代码就在里面,谢谢!

希望多多star!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值