Android Bitmap对齐网格

maf*_*ffo 5 java android

有没有人知道在拖动位图时是否有一种简单的方法可以使图像捕捉到网格?

目前我可以触摸位图并在屏幕上平滑移动.我希望能够在拖动时将其捕捉到不可见的网格.

Tre*_*vor 5

这就是我现在正在完成的应用程序中所做的事情.当用户在屏幕上拖动某些内容时,我会显示一个可见的捕捉网格,并且当拖动完成时,该对象将捕捉到该网格.为了显示网格,我的方法是使用View我命名的单独自定义GridOverLayView.它覆盖整个屏幕区域,并且非常简单地在其onDraw()方法中绘制一个捕捉网格.只有在拖动某些东西时才会显示它.

现在,关于Activity处理拖放的实际情况,我定义的一个特定常量是:

static final int SNAP_GRID_INTERVAL = 20;
Run Code Online (Sandbox Code Playgroud)

当对象被拖动时,即event.getAction()==MotionEvent.ACTION_MOVE在我处理事件时OnTouchListener,我使用以下内容执行对象的位置捕捉​​到网格:

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);
Run Code Online (Sandbox Code Playgroud)

...在哪里draggedInitialYdraggedInitialX存储初始期间记录的初始触摸位置MotionEvent.ACTION_DOWN.

更好的方法是允许被拖动的对象在没有捕捉的情况下移动,但仅在.ACTION_UP用户抬起手指时才将其捕捉到网格.在实践中,这感觉使用起来更好.