Как подготовить кривую анимацию перевода для Android? - PullRequest
11 голосов
/ 02 декабря 2011

В Android есть 4 типа анимации - вращение, альфа, масштабирование и перевод.Я хочу подготовить изогнутую анимацию перевода.

Возможно ли это ??1003*

Ответы [ 3 ]

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

Какую версию Android вы используете?Начиная с уровня API 11 вы можете использовать пользовательские Animators , которые могут легко реализовать ваш перевод кривой.

Если вы используете версию ниже, то есть только возможность вручную объединить несколько линейных переводов, используя анимацию перевода и настройку слушателей анимации

РЕДАКТИРОВАТЬ:

Пример:

View view;
animator = ValueAnimator.ofFloat(0, 1); // values from 0 to 1
animator.setDuration(5000); // 5 seconds duration from 0 to 1
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
{
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        float value = ((Float) (animation.getAnimatedValue()))
                    .floatValue();
        // Set translation of your view here. Position can be calculated
        // out of value. This code should move the view in a half circle.
        view.setTranslationX((float)(200.0 * Math.sin(value*Math.PI)));
        view.setTranslationY((float)(200.0 * Math.cos(value*Math.PI)));
    }
});

Я надеюсь, что это работает.Просто скопировал и вставил (и укоротил и изменил) код из одного из моих приложений.

3 голосов
/ 15 мая 2015

Вот аниматоры, которые я использую:

Цель: переместить представление "представление" по пути "путь"

Android v21 +:

// Animates view changing x, y along path co-ordinates
ValueAnimator pathAnimator = ObjectAnimator.ofFloat(view, "x", "y", path)

Android v11 +:

// Animates a float value from 0 to 1 
ValueAnimator pathAnimator = ValueAnimator.ofFloat(0.0f, 1.0f);

// This listener onAnimationUpdate will be called during every step in the animation
// Gets called every millisecond in my observation  
pathAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

float[] point = new float[2];

@Override
    public void onAnimationUpdate(ValueAnimator animation) {
        // Gets the animated float fraction
        float val = animation.getAnimatedFraction();

        // Gets the point at the fractional path length  
        PathMeasure pathMeasure = new PathMeasure(path, true);
        pathMeasure.getPosTan(pathMeasure.getLength() * val, point, null);

        // Sets view location to the above point
        view.setX(point[0]);
        view.setY(point[1]);
    }
});

Аналогично: Android, перемещать растровое изображение по пути?

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

Рассмотрим следующую веб-ссылку. Это игра на языке C. Вам нужно изолировать функцию projectile () и попытаться понять переменные, определенные в ней. Как только вы это получите, попробуйте реализовать его в своем собственном коде.

http://www.daniweb.com/software-development/c/code/216266

...