贝塞尔曲线是由a点过渡到b点位置的曲线图,呈抛物线形状过渡
连续慢动作效果如下:
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;
/**
* FileName: AnimUtil
* Author: admin
* Date: 2021/3/11 16:07
* Description:
*/
public class AnimUtil {
public static final int ANIM_DURATION = 1000;
/**
* @param from:点击位置的view
* @param to:终点位置的view
*/
public static void showAssignView(Activity activity, View from, View to) {
// 一个整型数组,用来存储按钮的在屏幕的X、Y坐标
final int[] startLocation = new int[2];
// 这是获取购买按钮的在屏幕的X、Y坐标(这也是动画开始的坐标)
from.getLocationInWindow(startLocation);
final int[] endLocation = new int[2];
to.getLocationInWindow(endLocation);
final int moveX = endLocation[0] - startLocation[0] - to.getWidth() / 3 - 3;
final int moveY = endLocation[1] - startLocation[1] - to.getHeight() / 3;
final ViewGroup rootView = (ViewGroup) activity.getWindow().getDecorView();
final View addView = getAssignView(activity, startLocation, rootView);
//水平方向动画
ObjectAnimator animatorX = ObjectAnimator.ofFloat(addView, "translationX", 0, moveX);
animatorX.setDuration(ANIM_DURATION);
//竖直方向动画
ObjectAnimator animatorY = new ObjectAnimator();
animatorY.setInterpolator(new AccelerateInterpolator());
animatorY.setPropertyName("translationY");
animatorY.setTarget(addView);
animatorY.setFloatValues(0, moveY);
animatorY.setDuration(ANIM_DURATION);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(animatorX, animatorY);
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
if (addView != null)
rootView.removeView(addView);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animatorSet.start();
}
private static View getAssignView(Activity activity, int[] startLocation, ViewGroup rootView) {
ImageView imageView = new ImageView(activity);
rootView.addView(imageView);
//显示动画的图片,这里设置添加到购物车的图片
Drawable drawable = activity.getResources().getDrawable(R.mipmap.ic_launcher);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
drawable.getMinimumWidth(),
drawable.getMinimumHeight());
imageView.setImageDrawable(drawable);
layoutParams.leftMargin = startLocation[0] + 50;
layoutParams.topMargin = startLocation[1] + 50;
imageView.setLayoutParams(layoutParams);
return imageView;
}
}
外部调用
AnimUtil.showAssignView(activity,imgView1,imgView2);