Android - 防止在拖动时调整大小

时间:2014-03-05 01:16:24

标签: android

编辑:早些时候,我说我只在右边看到了这种行为。我的错。它发生在右边界和底界界。

我有一个简单的测试活动,它具有以下视图层次结构。

RelativeLayout
   -- LinearLayout
       --TextView

我在LinearLayout对象上实现了拖动机制。在OnTouchListener实现中,我调整对象的leftMargin和topMargin。我们的想法是使这个对象成为根布局中的浮动窗口。

这大部分都按预期工作。但是,当我尝试将视图部分移出根窗口的右边界时,会出现问题。在这种情况下,视图开始调整大小。结果,文本开始换行到下一行。

当我将视图部分移出左边界或顶边界时,似乎不会出现此问题。只有右边界和底界才有。

我看了一些类似的消息。有人建议实现setClipChidren(false)和setClipToPadding(false)。但是,这没有任何效果。

还有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

您可以计算父布局的边界,并将拖动机制限制为这些边界。我是这样做的:

@Override
public boolean onTouch(View v, MotionEvent event) {
    android.widget.RelativeLayout.LayoutParams parms=(LayoutParams) v.getLayoutParams();
    //parms.topMargin=0;
    //parms.leftMargin=0;
    RelativeLayout parent=(RelativeLayout) v.getParent();
    switch(event.getAction())
    {
        case MotionEvent.ACTION_DOWN :
        {
            parms = (LayoutParams) v.getLayoutParams();
        }
        break;
        case MotionEvent.ACTION_MOVE :
        {
            if (event.getRawX()>v.getWidth()/2 && event.getRawX()<(parent.getWidth()-v.getWidth()/2) &&
                    event.getRawY()>v.getHeight()/2 && event.getRawY()<(parent.getHeight()-v.getHeight()/2)
                    ) {
                parms.leftMargin=(int) event.getRawX()-v.getWidth()/2;
                parms.topMargin=(int)event.getRawY()-v.getHeight()/2;
                v.setLayoutParams(parms);
            }



        }
        break;
        case MotionEvent.ACTION_UP :
        {
            //your stuff
        }

}
    return true;
}