设置LayoutParams边距的奇怪错误

时间:2010-08-16 00:38:27

标签: android

我正在使用我正在处理的自定义TextView这个奇怪的问题。我试图通过用手指拖动来移动视图,所以我得到触摸位置,做一些数学运算,并设置相应的leftMargin和topMargin。它有效,但我得到一些非常奇怪的行为。 leftMargin部分工作正常,但topMargin非常跳跃。它似乎在正确位置和位于其下方25个像素的位置之间振荡。当我只点击视图而不是连续拖动时,每次触摸都会向下移动25个像素。有谁知道为什么会这样?相关代码在这里:

     case MotionEvent.ACTION_MOVE :
 {      
  final float x = event.getX();
  final float y = event.getY();

  final float newMarginX;
  final float newMarginY;

  positionX = x;
  positionY = y;

  newMarginX = oldMarginX - (lastTouchX - positionX);
  newMarginY = oldMarginY - (lastTouchY - positionY);

  LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(this.getWidth(),   this.getHeight());
  params.leftMargin = (int) newMarginX;
  params.topMargin = (int) newMarginY;
  this.setLayoutParams(params);
  this.setText(Float.toString(y));

  lastTouchX = positionX;
  lastTouchY = positionY;

  oldMarginX = newMarginX;
  oldMarginY = newMarginY;

  break;     
 }

2 个答案:

答案 0 :(得分:0)

你不需要打电话给requestLayout吗? 您只需在修改后调用它(在本例中为setLayoutParams之后)。

http://developer.android.com/reference/android/view/View.html#requestLayout%28%29

答案 1 :(得分:0)

确保设置重力:

params.gravity = Gravity.LEFT

调整保证金之前。