Android → как оживить новую позицию
Вот простая анимация xml android:
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="-110"
android:toYDelta="-110" android:duration="1000" android:fillAfter="true" />
Я хочу переместить анимированный объект из центра экрана в 0, 0. Как кошка я это делаю (он должен работать на всех разрешениях экрана)
Мой ответ:
Спасибо, ребята, за вашу помощь. Но я исправляю свою проблему другим способом, динамически, без xml. Здесь полный код этого метода:
public void replace(int xTo, int yTo, float xScale, float yScale) {
// create set of animations
replaceAnimation = new AnimationSet(false);
// animations should be applied on the finish line
replaceAnimation.setFillAfter(true);
// create scale animation
ScaleAnimation scale = new ScaleAnimation(1.0f, xScale, 1.0f, yScale);
scale.setDuration(1000);
// create translation animation
TranslateAnimation trans = new TranslateAnimation(0, 0,
TranslateAnimation.ABSOLUTE, xTo - getLeft(), 0, 0,
TranslateAnimation.ABSOLUTE, yTo - getTop());
trans.setDuration(1000);
// add new animations to the set
replaceAnimation.addAnimation(scale);
replaceAnimation.addAnimation(trans);
// start our animation
startAnimation(replaceAnimation);
}
Ответы
Ответ 1
Мое решение:
Спасибо, ребята, за вашу помощь. Но я исправляю свою проблему другим способом, динамически, без xml. Здесь полный код этого метода:
public void replace(int xTo, int yTo, float xScale, float yScale) {
// create set of animations
replaceAnimation = new AnimationSet(false);
// animations should be applied on the finish line
replaceAnimation.setFillAfter(true);
// create scale animation
ScaleAnimation scale = new ScaleAnimation(1.0f, xScale, 1.0f, yScale);
scale.setDuration(1000);
// create translation animation
TranslateAnimation trans = new TranslateAnimation(0, 0,
TranslateAnimation.ABSOLUTE, xTo - getLeft(), 0, 0,
TranslateAnimation.ABSOLUTE, yTo - getTop());
trans.setDuration(1000);
// add new animations to the set
replaceAnimation.addAnimation(scale);
replaceAnimation.addAnimation(trans);
// start our animation
startAnimation(replaceAnimation);
}
Ответ 2
Сначала вставьте объект в контейнер, который занимает весь экран. Затем измените анимацию xml следующим образом
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="50%p" android:fromYDelta="50%p"
android:toXDelta="0%p" android:toYDelta="0%p"
android:duration="1000"
android:fillAfter="true" />
Вы также можете проверить эту ссылку API андроида http://developer.android.com/guide/topics/resources/animation-resource.html#translate-element
% p suffix переводит элемент "в процентах относительно родительского размера".
Ответ 3
Если вы хотите, чтобы он работал на всех экранах, вы не сможете указывать x, y значения. Анимация позволяет использовать проценты. Эта анимация переместит ваш вид из 0% x и y (относительно самого себя. Иными словами, где бы он ни находился до анимации, он начнется оттуда). Он переместится на 0% px и y (что означает 0% относительно родительский) Это должно привести вас в верхнюю левую. В зависимости от того, как далеко в углу вы хотите, вы можете попробовать 5% p или 10% p, чтобы получить дополнительный запас.
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0%" android:fromYDelta="0%" android:toXDelta="0%p"
android:toYDelta="0%p" android:duration="1000" android:fillAfter="true" />