Android ScaleAnimation из кода с девятью патчами не работает

У меня есть кнопка с надписью «Войти». Когда пользователь нажимает на нее, появляется диалоговое окно с предупреждением, в котором содержится информация о входе пользователя. Как только пользователь вводит свою информацию и нажимает «ОК», кнопка растягивается до ширины, необходимой для размещения «Добро пожаловать, [имя пользователя]». Я пытаюсь анимировать изменение ширины кнопки с «Войти» на «Добро пожаловать, [имя пользователя]».

Я сделал фон кнопки с помощью патча из девяти, который отлично работает, если я указываю разную ширину в файле xml. Когда я пытаюсь анимировать изменение ширины от ширины по умолчанию до большей ширины, она просто растягивается, как обычный .png, а не 9.png.

Вот код, который я использую для растягивания от одной статической ширины к другой:

<Button
    android:id="@+id/signIn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:background="@drawable/button_nine_patch"
    android:textSize="20dip"
    android:layout_marginBottom="-2dip" />

И

 ScaleAnimation stretch = new ScaleAnimation(1.0f ,10.0f, 1.0f, 1.0f);

 this.signIn = (Button) this.findViewById(R.id.signIn);
 this.signIn.setOnClickListener(this);

 stretch.setDuration(2000);
 signIn.startAnimation(stretch);

Поскольку я не знаю, сколько букв будет в имени человека, мне нужно иметь возможность установить окончательную ширину кнопки из кода.

Я гуглил как сумасшедший и просмотрел всю документацию по Android, но я просто не могу найти ответ на эту проблему.

Любая помощь приветствуется.


person Doug Henning    schedule 02.11.2012    source источник
comment
У меня такая же проблема. Я пытаюсь поменять местами 9-патч до и после анимации. Это может не сработать в вашем случае, но вы пробовали это?   -  person prodaea    schedule 14.02.2014


Ответы (1)


Когда Android выполняет процесс анимации представления, он анимирует растровое представление текущего представления, а не фактическое представление. Анимация представления потребует работы с компонентами, окружающими представление, и будет значительно дороже. Хотя это обычно полезно, в вашей ситуации 9-патч превращается в просто любой старый растровый рисунок и, следовательно, не дает желаемого результата.

Я не знаю, как преобразовать только определенную область представления, и у меня есть вопрос, посвященный этому здесь: Растянуть/масштабировать определенную область просмотра/растровое изображение

person Daniel Smith    schedule 26.04.2013