android自定义拖动阴影不可见

时间:2017-06-10 15:09:12

标签: android drag-and-drop

我想将自定义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的大小/布局参数导致问题。我不确定在哪里以及如何设置它。请帮助。

1 个答案:

答案 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);