4
A
回答
4
这就是我在一个应用程序中所做的工作,我现在刚刚完成。当用户在屏幕上拖动某些东西时,我会显示一个可见的捕捉网格,并在拖动完成时将该对象捕捉到该网格。为了显示网格,我的方法是使用单独的自定义View
,我将其命名为GridOverLayView
。它覆盖整个屏幕区域,并且它非常简单地在其方法中绘制一个快速网格。只有当某物正在被拖动时才会显示。
现在,关于实际Activity
中拖放的处理,我定义一个特定的常数:
static final int SNAP_GRID_INTERVAL = 20;
当对象被拖动左右,也就是我的OnTouchListener
内处理event.getAction()==MotionEvent.ACTION_MOVE
事件时
RelativeLayout.LayoutParams par = (RelativeLayout.LayoutParams) mThingBeingDragged.getLayoutParams();
par.topMargin = Math.round((event.getRawY() - draggedInitialY) /SNAP_GRID_INTERVAL) * SNAP_GRID_INTERVAL;
par.leftMargin = Math.round((event.getRawX() - draggedInitialX)/SNAP_GRID_INTERVAL) * SNAP_GRID_INTERVAL;
mThingBeingDragged.setLayoutParams(par);
...其中draggedInitialY
和draggedInitialX
存储初始触摸断定:我执行使用下面的抢购对象的位置的网格在最初的MotionEvent.ACTION_DOWN
期间记录离子。
更好的一点是允许被拖动的物体在没有捕捉的情况下四处移动,但是当用户举起手指时只能在.ACTION_UP
中捕捉到网格。在实践中,这使用感觉更好。
4
private PointF touchDown;
private int gridCellSize = 10;
private OnTouchListener touchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
{
touchDown = new PointF(event.getRawX(), event.getRawY());
break;
}
case MotionEvent.ACTION_MOVE:
{
RelativeLayout.LayoutParams par = (RelativeLayout.LayoutParams) v.getLayoutParams();
float yDeff = ((event.getRawY() - touchDown.y) /gridCellSize) * gridCellSize;
float xDeff = ((event.getRawX() - touchDown.x)/gridCellSize) * gridCellSize;
if(Math.abs(xDeff) >= gridCellSize)
{
par.leftMargin += (int)(xDeff/gridCellSize) * gridCellSize;
touchDown.x = event.getRawX() - (xDeff % gridCellSize);
}
if(Math.abs(yDeff) >= gridCellSize)
{
par.topMargin += (int)(yDeff/gridCellSize) * gridCellSize;
touchDown.y = event.getRawY() - (yDeff % gridCellSize);
}
v.setLayoutParams(par);
break;
}
default :
{
break;
}
}
return true;
}
};
相关问题
- 1. 网格视图 - 捕捉滚动位置
- 2. 捕捉到特定的网格位置
- 3. 硒网格,捕捉屏幕截图
- 4. 将控件捕捉到网格?
- 5. jQuery UI Draggable,捕捉到网格
- 6. Drag and Drop(加上捕捉到网格)
- 7. OpenCV捕捉到网格的角落
- 8. 如何捕捉到网格QGraphicsTextItem?
- 9. 实现捕捉到画布网格线
- 10. 实现WPF捕捉网格
- 11. 在JavaScript中捕捉网格
- 12. jQuery UI可拖动捕捉到网格,选择元素被捕捉到?
- 13. 插件地理位置捕捉位置网格尺寸太大
- 14. html2canvas捕捉格图像
- 15. Android opencv图片捕捉
- 16. UITableView捕捉到单元格
- 17. Android SMS捕捉
- 18. 如何在Android上捕捉图像捕捉事件?
- 19. JQuery UI捕捉元素内的网格
- 20. 在simulink中关闭网格捕捉
- 21. 如何在StarUML中捕捉网格?
- 22. 捕捉选定值从数据网格
- 23. 捕捉屏幕截图图片'Android'
- 24. 的Android捕捉键
- 25. Android捕捉异常
- 26. jQuery UI,捕捉网格示例,创建网格线?
- 27. Jquery酷拖放捕捉到位置
- 28. MapView捕捉到原始位置 - 帮助!
- 29. ScrollView/Gallery。捕捉到位。自动旋转
- 30. 捕捉到定位点动画
这太棒了。非常明确的答案。如果可以的话,会更高。感谢您的快速回复。我现在就试试这个。 – maffo 2012-02-23 08:24:45