2014-10-02 82 views
6

我想在拖动开始时增加图像阴影 我创建了自定义dragshadowbuilder并增加了大小double,但没有任何事情发生。android dragshadowbuilder影子大小

public class ImageDragShadowBuilder extends View.DragShadowBuilder { 

public ImageDragShadowBuilder(View v) { 
    super(v); 
} 


@Override 
public void onProvideShadowMetrics(Point shadowSize, Point touchPoint) { 
    shadowSize.set(getView().getWidth()*2, getView().getHeight()*2); 
    touchPoint.set(getView().getWidth()/2, getView().getHeight()/2); 

}} 

是什么原因?

回答

14

那么,这在文档中并不那么清楚。我正在使用给定的生成器来减小大小,你只需要通过为你的条件乘以来改变除法;

private static class MyDragShadowBuilder extends View.DragShadowBuilder { 

    private Point mScaleFactor; 
     // Defines the constructor for myDragShadowBuilder 
     public MyDragShadowBuilder(View v) { 

      // Stores the View parameter passed to myDragShadowBuilder. 
      super(v); 

     } 

     // Defines a callback that sends the drag shadow dimensions and touch point back to the 
     // system. 
     @Override 
     public void onProvideShadowMetrics (Point size, Point touch) { 
      // Defines local variables 
      int width; 
      int height; 

      // Sets the width of the shadow to half the width of the original View 
      width = getView().getWidth()/2; 

      // Sets the height of the shadow to half the height of the original View 
      height = getView().getHeight()/2; 

      // Sets the size parameter's width and height values. These get back to the system 
      // through the size parameter. 
      size.set(width, height); 
      // Sets size parameter to member that will be used for scaling shadow image. 
      mScaleFactor = size; 

      // Sets the touch point's position to be in the middle of the drag shadow 
      touch.set(width/2, height/2); 
     } 

     @Override 
     public void onDrawShadow(Canvas canvas) { 

      // Draws the ColorDrawable in the Canvas passed in from the system. 
      canvas.scale(mScaleFactor.x/(float)getView().getWidth(), mScaleFactor.y/(float)getView().getHeight()); 
      getView().draw(canvas); 
     } 

    }