我想创建一个与被拖动视图不同的自定义拖动阴影(实际上它是被拖动视图的修改版本)。
我可以将视图传递给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?
答案 0 :(得分: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)
之前修改视图并将其恢复到原始状态在view.draw(canvas)
方法之后。
这可以完成工作,但是作为一个黑客来到。总结一下这里的关键是在draw(canvas)
方法之前操作视图,并在相同方法之后将其重置为其原始状态。希望这很有用。
答案 1 :(得分:-2)
View.updateDragShadow为此公开,SDK版本> = 24。 我猜您的解决方案更好,因为它更灵活。