在android中的阴影生成器

我正在开发一个拖拽游戏,但我遇到一个小问题,当我在视图中单击时,阴影构建器首先出现在右上角,然后随着触摸位置移动。

阴影构建器也小于初始视图。 如何将其作为初始视图?

private final class MyTouchListener implements OnTouchListener { public boolean onTouch(View view, MotionEvent motionEvent) { if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { ClipData data = ClipData.newPlainText("", ""); DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); view.startDrag(data, shadowBuilder, view, 0); view.setVisibility(View.INVISIBLE); return true; } else { return false; } } } 

我可能会迟到,但是……你必须计算触摸点和可拖动左上角之间的偏移量,并将其与自定义DragShadowBuilder一起使用。

这是偏移的代码:

 @Override public boolean onTouch(View view, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN : { Point offset = new Point((int) event.getX(), (int) event.getY()); ClipData data = ClipData.newPlainText("", ""); DragShadowBuilder shadowBuilder = new CustomDragShadowBuilder(container, offset); view.startDrag(data, shadowBuilder, container, 0); view.setVisibility(View.INVISIBLE); } } return true; } 

这是自定义构建器的代码:

 import android.graphics.Point; import android.view.View; public class CustomDragShadowBuilder extends View.DragShadowBuilder { // ------------------------------------------------------------------------------------------ // Private attributes : private Point _offset; // ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------ // Constructor : public CustomDragShadowBuilder(View view, Point offset) { // Stores the View parameter passed to myDragShadowBuilder. super(view); // Save the offset : _offset = offset; } // ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------ // Defines a callback that sends the drag shadow dimensions and touch point back to the system. @Override public void onProvideShadowMetrics (Point size, Point touch) { // Set the shadow size : size.set(getView().getWidth(), getView().getHeight()); // Sets the touch point's position to be in the middle of the drag shadow touch.set(_offset.x, _offset.y); } // ------------------------------------------------------------------------------------------ }