Android自定义曲线动画

创建动画对象,添加类型估值算法

在这里定义动画执行过程中每一刻返回的坐标信息

PointF startValue = new PointF(100,100);
PointF endValue = new PointF(300,300);
ValueAnimator va = ValueAnimator.ofObject(new TypeEvaluator<PointF>() {
     @Override
     public PointF evaluate(float fraction, PointF startValue, PointF endValue) {
            //fraction = 开始动画 0 ~ 结束动画 1

            PointF outPutPointF = new PointF();

            //region 根据运动时长返回不同坐标,进而影响后续更新的坐标值 【这里只是随便赋值,需要完成曲线动画的可以在赋值过程中添加三角函数等二维曲线算法计算坐标点,从而影响动画的效果】

            //在 3/10 的运动时间段内
            if (fraction < 0.3) {
                outPutPointF = new PointF((float) 0.3 * startValue.x * fraction, (float) 0.3 * startValue.y  * fraction);
            }

            // 在 3/10 ~ 6/10 的运动时间段内
            if (fraction >= 0.3 && fraction < 0.6) {
                outPutPointF = new PointF((float) 0.6 * startValue.x * fraction, (float) 0.6 * startValue.y  * fraction);
             }

            // 在 6/10 以后的运动时间段内
            if (fraction >= 0.6) { 
                 outPutPointF = new PointF((float) 1 * endValue.x * fraction, (float) 1 * endValue.y  * fraction);
             }

            //endregion
            return outPutPointF;
    }
},startValue,endValue);

添加动画执行过程的操作

在这里修改view组件的布局信息,达到view的动画效果

RelativeLayout.LayoutParams lp = new LayoutParams(150, 150);         
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
      @Override
      public void onAnimationUpdate(ValueAnimator animation) {

             //这里得到的对象就是我们在上面吐出的outPutPointF
             PointF pointF = (PointF) animation.getAnimatedValue();
             //根据每刻得到的坐标值,来规划面板
             lp.setMargins((int) pointF.x, (int) pointF.y, 0, 0);
             //每一刻的重设view组件的位置,形成点到线的动画效果
             view.setLayoutParams(lp);
       }
});

启动动画

//设置动画时长为3秒
va.setDuration(3000);
//启动动画
va.start();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值