直接上刺刀
/**
* Desc : 自定义拖拽视图的大小
*/
public class CustomDragShadowBuilder extends View.DragShadowBuilder {
private double mShadowSize;
private Point mScaleFactor;
/**
* @param view 需要拖拽的view
* @param shadowSize 拖拽视图的放大倍数
*/
public CustomDragShadowBuilder(View view, double shadowSize) {
super(view);
this.mShadowSize = shadowSize;
}
/**
* @param shadowSize 这个参数是一个 Point 对象,用于存储阴影的尺寸。系统会根据这个尺寸来绘制阴影。你可以通过修改这个对象来改变阴影的大小。
* @param touchSize 这个参数也是一个 Point 对象,用于存储触摸点的尺寸。这个尺寸通常用于确定拖动的敏感度。
*/
@Override
public void onProvideShadowMetrics(Point shadowSize, Point touchSize) {
// 设置拖动阴影的宽度/高度为原宽/高度的 mShadowSize 倍
int mulWidth = (int) mul(getView().getWidth(), mShadowSize);
int mulHeight = (int) mul(getView().getHeight(), mShadowSize);
// 设置拖动阴影图像的宽度和高度
shadowSize.set(mulWidth, mulHeight);
// 设置手指在拖动图像的位置 设置为中点
touchSize.set(mulWidth / 2, mulHeight / 2);
mScaleFactor = shadowSize;
}
@Override
public void onDrawShadow(Canvas canvas) {
canvas.scale(mScaleFactor.x / (float) getView().getWidth(),
mScaleFactor.y / (float) getView().getHeight());
getView().draw(canvas);
}
/**
* double 乘法
*/
private double mul(double d1, double d2) {
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.multiply(bd2).doubleValue();
}
}
就不解释了,里面说明很详细
使用方法
/**
* 任意view 均可以拖拽
*
* @param view 触发的view
* @param menuCard2 携带的参数 Object类型
*/
public static void startDrag(View view, MenuCard2 menuCard2) {
// DragShadowBuilder(v)就是拖拽时那个半透明的View
// 拖拽起来的半透明View是显示在上层的,说明它是全局的,而且是跨界面跨进程的
// View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
CustomDragShadowBuilder dragShadowBuilder = new CustomDragShadowBuilder(view, 0.9);
view.startDrag(null, dragShadowBuilder, menuCard2, 0);
}
溜了,干饭去~