У меня есть эта странная проблема с пользовательским 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;
}
не забудьте установить силу тяжести:
params.gravity = Gravity.LEFT
прежде чем настраивать маржу.
Вам не нужно вызывать requestLayout?
Вы просто назовете его после своих изменений (в этом случае после setLayoutParams
).
http://developer.android.com/reference/android/view/View.html#requestLayout%28%29