ImageView исчезает после изменения LayoutParams

Я добавил ImageView к моему LinearLayout в методе onCreate программно, и он работал как надо.

    img = new ImageView(this);
    img.setImageResource(R.drawable.source);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 50, 0, 0);
    img.setLayoutParams(params); 


  layout = (LinearLayout) findViewById(R.id.index_view);
            layout.addView(img);

И я хочу изменить координаты x и y, когда пользователь касается экрана.
Метод onTouch — случай ACTION_MOVE:

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(newX, newY, 0, 0);
img.setLayoutParams(params);

newX и newY рассчитываются на основе сенсорных координат пользователей

Но этот код, похоже, работает неправильно. Я создал тосты, чтобы показать мне ширину изображения после каждого касания, и он показал мне, что после первого касания ширина устанавливается на ноль. Это говорит мне: ImageView исчез.

Есть предположения?


person Tobias Baumeister    schedule 28.05.2013    source источник


Ответы (1)


Я предполагаю, что вы убедились, что получаете значения newX, newY в onTouch(). Я чувствую, что ваша цель состоит в том, чтобы редактировать параметры макета, но вместо того, чтобы делать то, что вы делаете, вы назначаете новый набор параметров с шириной и высотой как LayoutParams.WRAP_CONTENT а затем установка полей.

Вы можете попытаться сначала получить существующие параметры следующим образом:

LinearLayout.LayoutParams params =
 ( LinearLayout.LayoutParams) img.getLayoutParams();

Затем измените маржу:

params.setMargins(newX, newY, 0, 0);
img.setLayoutParams(params);

Попробуйте и сообщите, если это поможет. Если нет, то мы можем говорить дальше.

person Shobhit Puri    schedule 28.05.2013
comment
Я пробовал - но все равно не работает. Изображение по-прежнему полностью исчезает - person Tobias Baumeister; 28.05.2013
comment
Хорошо, я только что заметил кое-что очень странное: если я устанавливаю для newX и newY значение 40 (например), это работает. Может ли это быть связано с тем, что отрицательная маржа невозможна? я думаю причина в этом - person Tobias Baumeister; 28.05.2013
comment
Вероятно, ваши значения newX, newY всегда равны 0. Попробуйте проверить это с помощью отладчика. - person Marek; 28.05.2013
comment
нет, это не так; они имеют значения от -1000 до 1000 - person Tobias Baumeister; 28.05.2013
comment
Если предположим, что ваш экран 200x200, и вы установите newX: Left margin и newY: Top margin как 100, 100, что произойдет с изображением? Он станет 0 размера. Итак, если ваши значения этих двух переменных такие или больше, чем эти, тогда ваш размер ImageView может стать 0. Эй, просто чтобы очистить: вы можете прочитать это, а затем это - person Shobhit Puri; 28.05.2013
comment
Ага, понятно. Но как я могу это исправить? Я ХОЧУ, чтобы изображение вышло за пределы экрана - person Tobias Baumeister; 28.05.2013
comment
Вы хотите перемещать изображение в зависимости от того, где вы касаетесь экрана? - person Shobhit Puri; 28.05.2013
comment
Нет, не знаю. За этим стоит более сложная математическая формула с cos & sin. ‹br› Но поможет ли это, если я установлю ширину изображения на стандартную после каждого setMargin()? - person Tobias Baumeister; 28.05.2013
comment
О, хорошо, это решение, кажется, работает. Я предполагаю, что мои значения были просто слишком большими. Мне придется переделать это вычисление. Спасибо за вашу помощь, теперь это работает;) установка ширины на стандартную после каждого изменения поля помогает - person Tobias Baumeister; 28.05.2013