Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 拖放期间缩放DragShadowBuilder画布中的动画_Android - Fatal编程技术网

Android 拖放期间缩放DragShadowBuilder画布中的动画

Android 拖放期间缩放DragShadowBuilder画布中的动画,android,Android,如何创建自定义DragShadowBuilder来设置画布中视图缩放的动画,而不是仅缩放到设定的大小 例如,我有一个用于拖放的ImageView,当我按下ImageView时,图像需要在用于拖放的画布中生长,当您将其拖动到拖放区域时,您会看到它跟随您的手指 我可以使用下面找到的CustomDragShadowBuilder类将图像缩放到设置的大小,但是有没有办法设置缩放动画 public static class CustomDragShadowBuilder extends View.Drag

如何创建自定义DragShadowBuilder来设置画布中视图缩放的动画,而不是仅缩放到设定的大小

例如,我有一个用于拖放的ImageView,当我按下ImageView时,图像需要在用于拖放的画布中生长,当您将其拖动到拖放区域时,您会看到它跟随您的手指

我可以使用下面找到的CustomDragShadowBuilder类将图像缩放到设置的大小,但是有没有办法设置缩放动画

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();