2012-11-24 28 views
2

我正在使用拖动游戏,但我遇到了一个小问题,那就是当我在视图中单击时,影子生成器首先出现在右上角,然后随触摸位置移动。安卓中的暗影生成器

此外,阴影构建器比初始视图小。我怎样才能把它作为初始视图?

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; 
     } 
    } 
} 

回答

5

我可能会迟到,但...... 你必须计算出触摸点和您可拖动左上角之间的偏移,并具有自定义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); 
} 
// ------------------------------------------------------------------------------------------ 
} 
+0

谢谢你,只是请立即修正错误,你写的容器而不是查看第一码。 – Michal

+0

对不起,它是固定的! –