0

我创建了一个 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;
    }
}
4

0 回答 0