Поворот не будет работать после перевода - PullRequest
2 голосов
/ 02 декабря 2011

Я программно перевел изображение. Позже в моем коде я пытаюсь повернуть изображение вокруг своего центра. Но вращение вращает изображение вокруг его первоначального размещения до того, как оно было переведено. Я закомментировал часть кода для перевода, и все работает нормально, изображение вращается вокруг его центра. Но когда я сначала перевожу его, поворот не учитывает новую позицию. Что мне нужно сделать?

View v;
animation anim = AnimationUtils.loadAnimation(getApplication(),R.anim.slide_in_up);
v.setTranslationY(#);
v.startAnimation(anim);

xml ниже:

<set xmlns:android="http://schemas.android.com/apk/res/android">
 <rotate
  android:fromDegrees="-360.0"
  android:toDegrees="0.0"
  android:pivotX="50%"
  android:pivotY="50%"
  android:duration="1000" />
</set>

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Возможно, вам потребуется добавить android:fillAfter="true" или эквивалент из кода setFillAfter(boolean fillAfter), чтобы преобразование было постоянным после завершения перевода.

Если для параметра fillAfter задано значение true, преобразование, выполненное этой анимацией, будет сохранено после ее завершения.По умолчанию установлено значение false, если не установлено.

// Редактировать: изначально я не читал, что вы используете метод API Level 11+ setTranslationY.

Устанавливает вертикальное положение этого вида относительно его верхнего положения.Это эффективно позиционирует объект после макета, в дополнение к тому, куда его поместил макет объекта.

Я предполагаю, что позиционирование после макета не влияет на все зависимости для анимации, например, оно не влияетсделайте эквивалент «fillAfter», следовательно, ваш результат не соответствует ожиданиям.Не очень приятный обходной путь может заключаться в отбрасывании метода setTranslationY и выполнении перевода с помощью TranslationAnimation.Установив длительность на ноль, вы можете имитировать «мгновенный» перевод.Я успешно сделал анимированные ротации после перевода, поэтому, используя этот подход, вы сможете получить результат, который ищете ...

0 голосов
/ 18 декабря 2017

Это нормальное поведение алгоритма 9 патчей.Я нашел способ сделать это с помощью canvas.Алгоритм работает таким образом, что перевод происходит относительно оси вращения.Для этого необходимо создать пользовательский вид холста в Android Studio.Вам нужно сначала использовать холст, чтобы вращать, затем установить границы рисованного элемента, который выровняет холст, а затем вы можете перевести как обычно.У меня есть библиотека с открытым исходным кодом, которая демонстрирует это.Вы можете найти библиотеку здесь: https://bitbucket.org/warwick/hacergestov3 Демонстрация YouTube здесь: https://youtu.be/0CoX5WUL6_8 Или загрузить демонстрационное приложение библиотеки здесь: https://play.google.com/store/apps/details?id=com.WarwickWestonWright.HacerGestoV3Demo В качестве альтернативы вы можете использовать вместо этого OpenGL ES.

0 голосов
/ 02 февраля 2012

ответ - сначала повернуть изображение, а затем перевести его. я делал это по-другому, поэтому он не вращался вокруг центра.

...