Android-在不更改拖动开始视图的情况下修改拖动阴影
我想创建一个与被拖动的视图不同的自定义拖动阴影(实际上它是被拖动的视图的修改版本)。Android-在不更改拖动开始视图的情况下修改拖动阴影
我可以通过一个着眼于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?
回答自己的问题。传递给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)
方法后将其恢复到原始状态。
这样做可以完成工作,但会成为黑客攻击。总结这里的关键是在方法之前操纵视图,并在相同的方法之后将其重置为其原始状态。希望这是有用的。