我想将自定义Textview显示为拖动阴影。我正在为此目的扩展View.DragShadowBuilder类。但拖放时没有显示任何内容。
这是我的自定义拖动阴影构建器类:
class MyShadow extends View.DragShadowBuilder
{
private TextView shadow;
public MyShadow(View view) {
super(view);
shadow = new TextView(getBaseContext());
shadow.setText("drag");
shadow.setTextSize(50);
shadow.setTextColor(Color.WHITE);
shadow.setLayoutParams(view.getLayoutParams());
}
@Override
public void onProvideShadowMetrics(Point outShadowSize, Point outShadowTouchPoint) {
int width, height;
width = getView().getWidth() *2;
height = getView().getHeight() *2;
outShadowSize.set(width, height);
outShadowSize.set(width/2, height/2);
}
@Override
public void onDrawShadow(Canvas canvas) {
shadow.draw(canvas);
}
}
我会将正在拖动的textview传递给影子buider:
View.DragShadowBuilder shadowBuilder=new MyShadow(view);
view.startDrag(data, shadowBuilder, view, 0);
我怀疑问题是texiew的大小/布局参数导致问题。我不确定在哪里以及如何设置它。请帮助。
答案 0 :(得分:1)
实际上,您不需要extend View.DragShadowBuilder
。您可以将自定义TextView
的实例传递给构造函数。
但请记住,当您以编程方式创建视图时,您不会将其添加到布局中。您的视图的getHeight()/getWidth()
为0.这就是拖放时无法显示任何内容的原因。
嗯,你必须衡量你的观点,并在其上调用layout()
。
view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
View.DragShadowBuilder shadow = new View.DragShadowBuilder(view);