我有一个简单的测试活动,它具有以下视图层次结构。
RelativeLayout
-- LinearLayout
--TextView
我在LinearLayout对象上实现了拖动机制。在OnTouchListener实现中,我调整对象的leftMargin和topMargin。我们的想法是使这个对象成为根布局中的浮动窗口。
这大部分都按预期工作。但是,当我尝试将视图部分移出根窗口的右边界时,会出现问题。在这种情况下,视图开始调整大小。结果,文本开始换行到下一行。
当我将视图部分移出左边界或顶边界时,似乎不会出现此问题。只有右边界和底界才有。
我看了一些类似的消息。有人建议实现setClipChidren(false)和setClipToPadding(false)。但是,这没有任何效果。
还有什么我想念的吗?
答案 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;
}