Search code examples
androiddrag-and-drop

android dragshadowbuilder shadow size


I try to increase shadow of image when dragging start
I created custom dragshadowbuilder and increase size double, but nothing happend.

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

}}

What is the reason?


Solution

  • Well, this is not so clear in documentation. I'm using given builder for decrease size you just need to change division by multiply for your condition ;

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