Я не могу изменить положение ImageView и setText TextView

1

У меня есть этот код (для Android):

handler.post(new MyRunnable());
....
static public class MyRunnable implements Runnable {
        public void run() {
            text.setText("Hi");
            imageV.layout(imageV.getLeft()+y, 218, imageV.getLeft()+150+y, 464);
            }
       }

Текст установлен, но положение изображения imageV не изменяется. Когда я не пишу text.setText("Hi"); , позиция будет изменена. У меня есть AbsoluteLayout.

Теги:

1 ответ

0

Вам нужно использовать setLayoutParams

handler.post(new MyRunnable());
....
static public class MyRunnable implements Runnable {
    public void run() {
        text.setText("Hi");
        final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) imageV.getLayoutParams();
        params.left += y;
        params.top = 218;
        params.right = params.left + 150;
        params.bottom = 464;
        imageV.setLayoutParams(params);
        }
 }

Имейте в виду, что вы можете использовать view.getLeft() и т.д. После того, как был сделан хотя бы один макет. До этого это вернет 0. Если вы хотите сделать это с помощью макета, который не будет делать. Вы также должны вызвать requestLayout(). Но вызов layout + requestLayout() в значительной степени зависит от реализации setLayoutParams, поэтому вам лучше использовать его.

  • 0
    Я не знаю, прав ли я, но когда я запускаю менеджер событий, я увижу, что эта реализация более сложна (в 6-10 раз) (в моей программе) для процессора. Вещи номер два: я не понимаю, почему я не могу использовать setText, а затем макет в Relative / AbosoluteLayoute, и я тоже пытаюсь использовать requestLayout (). Потому что я не хочу менять поля представления, но хочу установить положение (x, y) вида. Есть ли другой способ? Спасибо за любую помощь!
  • 0
    Единственный способ изменить положение представления и изменить его область касания (место, где он будет получать сенсорные евнеты), - через setLayoutParams. Другой способ, о котором я знаю, это переопределить метод onDraw / dispatchDraw вашего представления и вызвать canvas.translate(x,y) перед вызовом super.dispatchDraw() . Тогда представление будет «перемещено», но это будет только визуально. Представление будет продолжать получать события касания в своем старом месте (месте его левого и верхнего полей). Почему вы не хотите использовать setLayoutParams?

Ещё вопросы

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