ドラッグ シャドウのデフォルトの外観と位置は、過去のビューが透明になり、タッチを中心に配置されます。私はそれがしっかりしていて、あなたのタッチからビューが始まることを望んでいます.
DragShadowBuilder を継承し、「onProvideShadowMetrics」と「onDrawShadow」をオーバーライドしました。希望どおりの配置ができましたが、透明をオフにする方法がわかりません。
これは、dragShadowBuilder と dragShadowBuilder クラスを作成する呼び出しを含むタッチ リスナーです。
private OnTouchListener onTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Item current = (Item) ((View) v.getTag()).getTag();
//ClipData data = ClipData.newPlainText("test", "testText");
View dragView = (View) v.getTag();//the on touch view is just the "grid" image. It holds the whole view in it's tag
DragShadowBuilder shadowBuilder = new ItemDragShadowBuilder(dragView,
new Point(v.getWidth()/2, v.getHeight()/2));
v.startDrag(null, shadowBuilder, current, 0);
dragView.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
};
private static class ItemDragShadowBuilder extends View.DragShadowBuilder {
private Point touchPoint = null;
private Point sizePoint = null;
private View dragView = null;
public ItemDragShadowBuilder(View dragView, Point touchPoint) {
super();
sizePoint = new Point(dragView.getWidth(), dragView.getHeight());
this.touchPoint = touchPoint;
this.dragView = dragView;
}
@Override
public void onProvideShadowMetrics (Point size, Point touch) {
size.set(sizePoint.x, sizePoint.y);
touch.set(touchPoint.x,touchPoint.y);
}
@Override
public void onDrawShadow(Canvas canvas) {
dragView.draw(canvas);
//How do I change the transparency?
//super.onDrawShadow(canvas);
}
}
アイテムがドラッグされている現在の画面は次のとおりです。
透け感に注目。サブスクリプションを長押しして [再注文] を選択したときの、以下の Google Current アプリのような外観にしたいと考えています。ビューがしっかりしていることがわかります。
ドラッグ シャドウをソリッドにするにはどうすればよいですか?