抛物线动画

private void jumpToAnim() {

// 得到两个按钮的位置,和宽高,设置收藏按钮和收藏文件夹之间的抛物线动画

final int[] location1s;

final int[] location2s;

    location1s = new int[2];

    llShouCang.getLocationInWindow(location1s);

    location2s = new int[2];

    rlFavorites.getLocationOnScreen(location2s);

    location1s[0]=location1s[0]+llShouCang.getMeasuredWidth()/8;

    location2s[0]=location2s[0]+rlFavorites.getMeasuredWidth()/2;

ValueAnimator valueAnimator = new ValueAnimator().ofFloat((float)(location1s[0]+0.0),(float)(location2s[0]+0.0));

valueAnimator.setDuration(1000);

// valueAnimator.setObjectValues(new PointF(0, 0), new PointF(200, 200));

valueAnimator.setInterpolator(new DecelerateInterpolator());;

valueAnimator.start();

ivVehicleLike.setVisibility(View.VISIBLE);

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

ivVehicleLike.setVisibility(View.GONE);

}

}, 900);

valueAnimator.addUpdateListener(new AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

Float x=  (Float) animation.getAnimatedValue();

Float y;

int midX=(location2s[0]+location1s[0])/2;

int halfLength=(location2s[0]-location1s[0])/2;

// y=location1s[1]-midX*midX/30+(x-midX)*(x-midX)/30;

y=location1s[1]+(x-midX)*(x-midX)/30-halfLength*halfLength/30-llShouCang.getMeasuredHeight()/2;

ivVehicleLike.setX(x);

ivVehicleLike.setY(y);

// ivVehicleLike.setX(x);

// ivVehicleLike.setY(y);

}

});

}

原文地址:https://www.cnblogs.com/wangzehuaw/p/4494366.html