【问题标题】:Android- modifying drag shadow without changing the drag-start viewAndroid-修改拖动阴影而不改变拖动开始视图
【发布时间】:2023-04-04 11:38:01
【问题描述】:

我想创建一个与被拖动视图不同的自定义拖动阴影(实际上它是被拖动视图的修改版本)。

我可以像这样将视图传递给View.DragShadowBuilder 构造函数:

View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(myView);

问题是我对myView 所做的任何更改也会影响被拖动的视图(这是因为无法克隆视图)。 How do I clone a View?

或者,我可以扩展 View.DragShadowBuilder 并在提供的 onDraw(Canvas canvas) 方法中使用位图绘制我的自定义视图。但我一开始根本无法生成阴影(我假设这是一种有效的方法)。

相反,是否可以从附加到屏幕的视图中制作自定义拖动阴影?任何指针或解决方案都会很有帮助。

到目前为止,我的搜索没有产生任何有用的结果: How to create a custom drag shadow? How to show custom DragShadow instead of ListViewFragment row?

【问题讨论】:

    标签: android drag-and-drop


    【解决方案1】:

    回答自己的问题。传递给View.DragShadowBuilder(View view) 的参数需要可见(并附加到合适的布局容器)。来自 xml 的膨胀视图或未附加到任何 ViewGroup / View 的动态创建的视图不会生成任何拖动阴影。

    这里的关键是扩展View.DragShadowBuilder类并覆盖onDrawShadow(Canvas canvas)方法

    @Override
    onDrawShadow(Canvas canvas) {
        final View view = mView.get();
    
        /* give drag shadow a blue background, this also changes the drag-start view
        attached to the screen */
        view.setBackgroundColor(Color.BLUE);
    
        view.draw(canvas);
    
        /* bring the drag-start view back to its original state (does not affect drag-shadow) */
        view.setBackgroundColor(Color.TRANSPARENT);
    } 
    

    如果您的要求是更改拖动阴影,使其看起来与附加到屏幕上的 drag-start 视图不同,请在调用 view.draw(canvas) 之前修改视图并在 @987654327 之后将其恢复为原始状态@方法。

    这可以完成工作,但给人的印象是一个 hack。总结这里的关键是在draw(canvas)方法之前操作视图并在相同方法之后将其重置为原始状态。希望这很有用。

    【讨论】:

      【解决方案2】:

      View.updateDragShadow 为此公开,SDK 版本 >= 24。 我想你的解决方案更好,因为它更灵活。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-21
        • 1970-01-01
        • 2011-09-30
        • 2021-05-11
        • 1970-01-01
        相关资源
        最近更新 更多