我正在使用我正在处理的自定义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;
}
答案 0 :(得分:0)
你不需要打电话给requestLayout吗?
您只需在修改后调用它(在本例中为setLayoutParams
之后)。
http://developer.android.com/reference/android/view/View.html#requestLayout%28%29
答案 1 :(得分:0)
确保设置重力:
params.gravity = Gravity.LEFT
调整保证金之前。