Странная ошибка с настройкой полей LayoutParams

1

У меня есть эта странная проблема с пользовательским 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
    Нет идей? Пожалуйста, я схожу с ума, пытаясь понять это
Теги:

2 ответа

0

не забудьте установить силу тяжести:

params.gravity = Gravity.LEFT

прежде чем настраивать маржу.

0

Вам не нужно вызывать requestLayout? Вы просто назовете его после своих изменений (в этом случае после setLayoutParams).

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню