Android弹性动画三种实现方式

  1. 插值器测试查看网站 http://inloop.github.io/interpolator/

  2. 一个简单的放大动画

           ObjectAnimator animatorX = ObjectAnimator.ofFloat(view, "scaleX", 1.0f, 1.5f);       ObjectAnimator animatorY = ObjectAnimator.ofFloat(view, "scaleY", 1.0f, 1.5f);       AnimatorSet animatorSet = new AnimatorSet();       animatorSet.setDuration(1000);       animatorSet.playTogether(animatorX, animatorY);       animatorSet.start();
  3. 第一种实现方式,通过插值器来完成

    自定义一个插值器

    public class SpringScaleInterpolator implements Interpolator {   private float factor;   public SpringScaleInterpolator(float factor) {       this.factor = factor;   }   @Override   public float getInterpolation(float x) {       return (float) (pow(2, -10 * x) * sin((x - factor / 4) * (2 * PI) / factor) + 1);     //这个公式在http://inloop.github.io/interpolator/中测试获取   }}

    使用插值器,此处使用的属性动画,使用补间动画也可以使用

    animatorSet.setInterpolator(new SpringScaleInterpolator(0.1f));
  4. 第二种方式 facebook

    build.gradle 中添加 com.facebook.rebound:rebound:0.3.8

           SpringSystem springSystem = SpringSystem.create();       Spring spring = springSystem.createSpring();       spring.setCurrentValue(1.0f);       spring.setSpringConfig(new SpringConfig(50, 5));       spring.addListener(new SimpleSpringListener() {           @Override           public void onSpringUpdate(Spring spring) {               super.onSpringUpdate(spring);               float currentValue = (float) spring.getCurrentValue();               view.setScaleX(currentValue);               view.setScaleY(currentValue);           }       });       spring.setEndValue(1.8f);       //随便看看  弹性效果可以通过修改tension和friction的值来改变
  5. 第三种方式

    暂不支持 依赖 compileSdkVersion 26,minSdkVersion 16 以上,有一定的局限性

    build.gradle文件中引入 com.android.support:support-dynamic-animation:25.3.1

           SpringAnimation animationX = new SpringAnimation(imageView, SpringAnimation.SCALE_X,1.8f);       SpringAnimation animationY = new SpringAnimation(imageView, SpringAnimation.SCALE_Y,1.8f);       animationX.getSpring().setStiffness(SpringForce.STIFFNESS_LOW);       animationX.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY);       animationX.setStartValue(1.0f);       animationY.getSpring().setStiffness(SpringForce.STIFFNESS_LOW);       animationY.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY);       animationY.setStartValue(1.0f);       animationX.start();       animationY.start();//stiffness的值越小,弹性效果越好,弹时间越长。  //DampingRatio的值越大,弹性效果越差。

更多相关文章

  1. Android 创建,验证和删除桌面快捷方式 (删除快捷方式测试可用)
  2. android中四个典型动画设置
  3. 监听android home键的实现方式
  4. Android Property Animation属性动画初识:透明渐变(1)
  5. android移动补间动画
  6. android 发送短信的两种方式,以及接收报告和发送报告
  7. Android动画之RotateAnimation使用
  8. Android解析XML的三种方式
  9. Android并发编程线程间通信的三种基本方式

随机推荐

  1. Android 开发最佳实践
  2. 聊聊Android切图
  3. Android 开发 — 开机自启动
  4. android半透明activity设置
  5. Android Password Field Example
  6. android 笔记 --- Android中Handler,Loop
  7. Android点击图标重新启动问题
  8. android Video播放
  9. Android之PopupWindow类似微信右上角的弹
  10. Android官方入门文档[14]停止和重新启动