android 带阻尼的周期运动
16lz
2021-12-04
public void animate(View view) { PropertyValuesHolder propertyValuesHolder = PropertyValuesHolder.ofFloat("y", view.getY(), view.getY()+70); ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(view, propertyValuesHolder); objectAnimator.setInterpolator(new CycleInterpolator(2)); objectAnimator.setDuration(400); objectAnimator.start(); }
这个是y轴方向的一个周期运动(简谐运动)
我想让震幅越来越小我重写了CycleInterpolator
public class MyCycleInterpolator extends CycleInterpolator { private float cycles; public MyCycleInterpolator(float cycles) { super(cycles); this.cycles=cycles; } public MyCycleInterpolator(Context context, AttributeSet attrs) { super(context, attrs); } public float getInterpolation(float input) { // return (float)(Math.sin(2 * cycles * Math.PI * (input))); return (float)(Math.sin(2 * cycles * Math.PI * (input)))*(1f-input); }}
根据简谐运动公式 我根据 时间因子 input确定 振幅 A=(1-input) 越来越小
实现了有阻尼上下震动的效果
public void animateY(View view) { PropertyValuesHolder propertyValuesHolder = PropertyValuesHolder.ofFloat("y", view.getY(), view.getY()+70); ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(view, propertyValuesHolder); objectAnimator.setInterpolator(new MyCycleInterpolator(2)); objectAnimator.setDuration(400); objectAnimator.start(); }
还有 放大缩小的跟果冻似的效果
public void animateScale(View view){ PropertyValuesHolder propertyValuesHolder1 = PropertyValuesHolder.ofFloat("scaleX",1f,1.5f); PropertyValuesHolder propertyValuesHolder2 = PropertyValuesHolder.ofFloat("scaleY",1f,1.5f); ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(view, propertyValuesHolder1,propertyValuesHolder2); objectAnimator.setInterpolator(new MyCycleInterpolator(2)); objectAnimator.setDuration(400); objectAnimator.start(); }
更多相关文章
- python list.sort()根据多个关键字排序的方法实现
- android Gallery3D效果
- android:MotionEvent
- Android(安卓)支付宝支付密码输入界面
- Android的按钮按下效果
- Android用悬浮按钮实现翻页效果
- Android(安卓)studio 基于BaseAdapter 的翻牌游戏
- Android(安卓)导航条效果实现(一) TabActivity+TabHost
- Android(安卓)studio 简单的多线程