【问题标题】:How to change Drag shadow after drag has been started in android?在android中开始拖动后如何更改拖动阴影?
【发布时间】:2015-05-26 06:51:33
【问题描述】:

我想在调用 startDrag 后更改 dragShadow 的图像。 但我没有找到任何可以做到这一点的 API。 有什么建议我该怎么做?

            ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());
            String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
            ClipData dragData = new ClipData(v.getTag().toString(), mimeTypes, item);
            View.DragShadowBuilder dragShadow= new View.DragShadowBuilder(((ImageButton)findViewById(R.id.rele_button)));

【问题讨论】:

  • 覆盖 View.DragShadowBuilder 类并使用。您可以在link 中找到示例代码
  • 我以前见过,我试过,但我不能改变它。
  • 请发布更多代码

标签: android drag


【解决方案1】:

更多代码 扩展 View.DragShadowBuilder 的类代码

public class ImageDragShadowBuilder extends View.DragShadowBuilder {
private static Drawable shadow;

ImageDragShadowBuilder() {
    super();
}

public static View.DragShadowBuilder fromResource(Context context, int drawableId) {
    ImageDragShadowBuilder builder = new ImageDragShadowBuilder();

    builder.shadow = context.getResources().getDrawable(drawableId);
    if (builder.shadow == null) {
        throw new NullPointerException("Drawable from id is null");
    }

    builder.shadow.setBounds(0, 0, builder.shadow.getMinimumWidth(), builder.shadow.getMinimumHeight());

    return builder;
}

public static View.DragShadowBuilder fromBitmap(Context context, Bitmap bmp) {
    if (bmp == null) {
        throw new IllegalArgumentException("Bitmap cannot be null");
    }

    ImageDragShadowBuilder builder = new ImageDragShadowBuilder();

    builder.shadow = new BitmapDrawable(context.getResources(), bmp);
    builder.shadow.setBounds(0, 0, builder.shadow.getMinimumWidth(), builder.shadow.getMinimumHeight());

    return builder;
}

@Override
public void onDrawShadow(Canvas canvas) {
    shadow.draw(canvas);
}

@Override
public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
    shadowSize.x = shadow.getMinimumWidth();
    shadowSize.y = shadow.getMinimumHeight();

    shadowTouchPoint.x = (int)(shadowSize.x / 2);
    shadowTouchPoint.y = (int)(shadowSize.y / 2);
}

}

调用开始拖动后的更改代码

这段代码属于onDrag函数

case DragEvent.ACTION_DRAG_ENTERED:
                    ImageDragShadowBuilder.fromResource(getBaseContext(), R.mipmap.phone_icon);

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 2021-05-11
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多