2014-10-08 80 views
0

如何创建一个自定义DragShadowBuilder来动画缩放视图,而不是仅缩放到设置大小?在DragShadowBuilder画布拖放过程中缩放动画

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

我能够通过以下方式将图像缩放到一定大小CustomDragShadowBuilder找到的类here但是有没有一种方法可以缩放比例?

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

} 

回答

0
我发现

最好的解决方案是之前的动画规模开始拖动,这样的事情:

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