Android DragShadowBuilder 视图刷新

问题描述 投票:0回答:2

我正在将拖放功能实现到我的应用程序中。 我正在移动

TextView
对象,并使用
DragShadowBuilder
为该文本视图构建阴影。
问题是,有没有办法在拖动项目时更改textView文本?我的意思是在
DragEvent.ACTION_DRAG_ENTERED
DragEvent.ACTION_DRAG_LOCATION
案例?

android drag-and-drop textview
2个回答
0
投票

自 API 24 起,现在有 View.updateDragShadow,您可以在每次需要阴影的视觉变化时调用它。

您甚至可以再次使用 startDragAndDrop() 中的相同阴影实例作为参数,它将调用 onProvideShadowMetrics 和 onDrawShadow 来反映任何更改。


-2
投票
private static class MyDragShadowBuilder extends View.DragShadowBuilder {

// The drag shadow image, defined as a drawable thing
private static Drawable shadow;

    // Defines the constructor for myDragShadowBuilder
    public MyDragShadowBuilder(View v) {

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

        // Creates a draggable image that will fill the Canvas provided by the system.
        shadow = new ColorDrawable(Color.LTGRAY);
    }

    // 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
        private int width, 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;

        // The drag shadow is a ColorDrawable. This sets its dimensions to be the same as the
        // Canvas that the system will provide. As a result, the drag shadow will fill the
        // Canvas.
        shadow.setBounds(0, 0, width, height);

        // Sets the size parameter's width and height values. These get back to the system
        // through the size parameter.
        size.set(width, height);

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

    // Defines a callback that draws the drag shadow in a Canvas that the system constructs
    // from the dimensions passed in onProvideShadowMetrics().
    @Override
    public void onDrawShadow(Canvas canvas) {

        // Draws the ColorDrawable in the Canvas passed in from the system.
        shadow.draw(canvas);
    }
}

拖放安卓

© www.soinside.com 2019 - 2024. All rights reserved.