我创建了一个 OnTouchListener,它允许我在屏幕上拖动视图。这很好用,除了一个问题:
我的视图调整大小而不是离开父级。它们位于相对布局中,我怀疑这会导致问题。它们仅在触摸我的 RelativeLayout 的右边界或下边界时才会调整大小。
我希望有一个简单的解决方案来解决这个问题(理想情况下不涉及调整 RelativeLayout 的大小),但我还没有找到解决方案。
理想情况下,此解决方案适用于所有视图,因为我将此 OnTouchListener 用于 TextViews 以及 ImageViews。我希望找到一个 XML 解决方案。我假设其他人已经处理过这个问题?
PS:在我发布这个之前..我刚刚记得我相信有一个标志可以击中 RelativeLayout 的边框,所以当发生这种情况时,也许我可以对 TextView 应用负边距。想法?
编辑
这是我的 OnTouchListener:
// Dragging functionality for all views and double tap to remove
// functionality for ImageViews
final OnTouchListener onTouchListener = new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
v.bringToFront();
//if(v instanceof android.widget.ImageView)
//mScaleDetector.onTouchEvent(event);
layoutParams = (LayoutParams) v.getLayoutParams();
switch (event.getActionMasked())
{
case MotionEvent.ACTION_DOWN:
// Where the user started the drag
pressed_x = (int) event.getRawX();
pressed_y = (int) event.getRawY();
if (v instanceof android.widget.ImageView)
{
curTime = System.currentTimeMillis();
if(curTime - prevTime <= DOUBLE_TAP_INTERVAL)
{
v.setVisibility(View.GONE);
}
prevTime = curTime;
}
case MotionEvent.ACTION_MOVE:
// Where the user's finger is during the drag
final int x = (int) event.getRawX();
final int y = (int) event.getRawY();
// Calculate change in x and change in y
dx = x - pressed_x;
dy = y - pressed_y;
// Update the margins
layoutParams.leftMargin += dx;
layoutParams.topMargin += dy;
v.setLayoutParams(layoutParams);
// Save where the user's finger was for the next ACTION_MOVE
pressed_x = x;
pressed_y = y;
break;
default:
break;
}
return true;
}
}