Android 拖放期间缩放DragShadowBuilder画布中的动画
如何创建自定义DragShadowBuilder来设置画布中视图缩放的动画,而不是仅缩放到设定的大小 例如,我有一个用于拖放的ImageView,当我按下ImageView时,图像需要在用于拖放的画布中生长,当您将其拖动到拖放区域时,您会看到它跟随您的手指 我可以使用下面找到的CustomDragShadowBuilder类将图像缩放到设置的大小,但是有没有办法设置缩放动画Android 拖放期间缩放DragShadowBuilder画布中的动画,android,Android,如何创建自定义DragShadowBuilder来设置画布中视图缩放的动画,而不是仅缩放到设定的大小 例如,我有一个用于拖放的ImageView,当我按下ImageView时,图像需要在用于拖放的画布中生长,当您将其拖动到拖放区域时,您会看到它跟随您的手指 我可以使用下面找到的CustomDragShadowBuilder类将图像缩放到设置的大小,但是有没有办法设置缩放动画 public static class CustomDragShadowBuilder extends View.Drag
public static class CustomDragShadowBuilder extends View.DragShadowBuilder {
private static final int SCALING_FACTOR = 4;
public CustomDragShadowBuilder(View view) {
super(view);
}
@Override
public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
View v = getView();
final int width = v.getWidth() * SCALING_FACTOR;
final int height = v.getHeight() * SCALING_FACTOR;
shadowSize.set(width, height);
shadowTouchPoint.set(width / 2, height / 2);
}
@Override
public void onDrawShadow(Canvas canvas) {
canvas.scale(SCALING_FACTOR, SCALING_FACTOR);
getView().draw(canvas);
}
}
我找到的最佳解决方案是在开始拖动之前设置缩放动画,类似于:
final View yourView;
ObjectAnimator scaleX = ObjectAnimator.ofFloat(yourView, "scaleX",4f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(yourView, "scaleY",4f);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(scaleX, scaleY);
animSetXY.setDuration(duration);
final View.DragShadowBuilder shadow = new View.DragShadowBuilder(this);
animSetXY.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
v.startDrag(dragData, // the data to be dragged
new CustomDragShadowBuilder(yourView) , // the drag shadow builder
null,
0 // flags (not currently used, set to 0)
);
}
});
animSetXY.start();