实用的添加购物车抛物线动画和自由落体类型动画

添加购物车的动画效果相信很多开发者都用到过,近期听到过很多这样的需求,故此写了demo,直接上效果图:


  • 这里的界面很简单,代码就不贴了,简单贴一下点击事件下的代码片段。
  • parabola监听(抛物线)
    [java]  view plain  copy
    1. <span style="font-size:14px;">ValueAnim.startValue(iv_dot, screenHeight, 01);</span>  
  • Free_Falling_body监听(自由落体,可设置X和Y方向)
    [java]  view plain  copy
    1. <span style="font-size:14px;">iv_dot.setX(tv_fallingBody.getX());  
    2. iv_dot.setY(tv_fallingBody.getY());  
    3. ValueAnim.startValue(iv_dot, "y"0, screenHeight - tv_fallingBody.getHeight() - tv_fallingBody.getMeasuredHeight() - iv_dot.getMeasuredHeight() - iv_dot.getHeight());</span>  
    这里做一下说明:
iv_dot:是要移动的view;screenHeight:是当前屏幕的高度;ValueAnim:是动画移动工具类。
下面贴ValueAnim类:
[java]  view plain  copy
  1. <span style="font-size:14px;">public class ValueAnim {  
  2.   
  3.     /** 
  4.      * 设置view的平移动画,可设置X或Y方向的平移 
  5.      * 
  6.      * @param view 要平移的view 
  7.      */  
  8.     public static void startValue(final View view, final String orientation, float from, float to) {  
  9.         ValueAnimator anim = ValueAnimator.ofFloat(from, to);  
  10.         anim.setTarget(view);  
  11.         anim.setDuration(2000);  
  12.         anim.setInterpolator(new AccelerateInterpolator());  
  13.         anim.start();  
  14.         anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  
  15.             @Override  
  16.             public void onAnimationUpdate(ValueAnimator animation) {  
  17.                 if (orientation.equals("y")) {  
  18.                     view.setTranslationY((Float) animation.getAnimatedValue());  
  19.                 } else {  
  20.                     view.setTranslationX((Float) animation.getAnimatedValue());  
  21.                 }  
  22.             }  
  23.         });  
  24.     }  
  25.   
  26.     /** 
  27.      * 抛物线 
  28.      * 
  29.      * @param view  要平移的view 
  30.      * @param screenHeight 当前屏幕高度 
  31.      * @param from 
  32.      * @param to 
  33.      */  
  34.     public static void startValue(final View view, final int screenHeight, float from, float to) {  
  35.         ValueAnimator anim = ValueAnimator.ofFloat(from, to);  
  36.         anim.setTarget(view);  
  37.         anim.setDuration(2000);  
  38.         anim.setInterpolator(new AccelerateInterpolator());  
  39.         anim.start();  
  40.         anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  
  41.             @Override  
  42.             public void onAnimationUpdate(ValueAnimator animation) {  
  43.                 float value = (Float) animation.getAnimatedValue();  
  44.                 view.setTranslationX(-130 * value * 3);//抛物线的x计算公式  
  45.                 view.setTranslationY(0.5f * screenHeight * value * 3 * value * 3);  
  46.             }  
  47.         });  
  48.     }  
  49. }</span>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值