В андроиде есть 4 типа анимаций - вращение, альфа, масштаб и перевод. Я хочу подготовить изогнутую анимацию перевода.
Возможно ли это.?
В андроиде есть 4 типа анимаций - вращение, альфа, масштаб и перевод. Я хочу подготовить изогнутую анимацию перевода.
Возможно ли это.?
Какую версию Android вы используете? Начиная с уровня API 11, вы можете использовать пользовательский Animators, который может легко реализовать ваш перевод кривой.
Если вы используете версию ниже, то есть afaik только возможность вручную объединить несколько линейных переводов с использованием анимации трансляции и установки анимационных аниматоров
EDIT:
Пример:
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)));
}
});
Я надеюсь, что это сработает. Просто скопировал и вставлял (и сокращал и менял) код из одного из моих приложений.
Вот аниматоры, которые я использую:
Цель: переместить вид "просмотреть" по пути "Путь"
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, переместите растровое изображение по пути?
Рассмотрим следующую веб-ссылку. Это игра на C. Вам нужно изолировать функцию projectile() и попытаться понять переменные, определенные внутри нее. Как только вы попытаетесь реализовать его в своем собственном коде.