在Android 11中,DragShadowBuilder的工作流程与以往的版本略有不同。为了解决这个问题,可以尝试以下的解决方案:
class MyDragShadowBuilder extends View.DragShadowBuilder {
private View mView;
public MyDragShadowBuilder(View view) {
super(view);
mView = view;
}
@Override
public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
super.onProvideShadowMetrics(shadowSize, shadowTouchPoint);
//设置阴影视图的大小
shadowSize.set(mView.getWidth(), mView.getHeight());
//设置拖动视图的接触点
shadowTouchPoint.set(shadowSize.x / 2, shadowSize.y / 2);
}
@Override
public void onDrawShadow(Canvas canvas) {
//将拖动视图绘制到Canvas上
mView.draw(canvas);
}
}
mView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
//调用startDragAndDrop()方法,将自定义DragShadowBuilder作为第二个参数传递
return view.startDragAndDrop(null, new MyDragShadowBuilder(view), null, 0);
}
});