En Android cómo utilizar ObjectAnimator para desplazarse al punto x a lo largo de una curva

Tengo una vista de la imagen "piedra" y la estoy moviendo de su posición actual a una posición de X, de Y. Quiero que se mueva a lo largo de una curva. Por favor, hágamelo saber cómo puedo hacer eso (he establecido el min api como 11)

ObjectAnimator moveX = ObjectAnimator.ofFloat(stone, "x", catPos[0] ); ObjectAnimator moveY = ObjectAnimator.ofFloat(stone, "y", catPos[1] ); AnimatorSet as = new AnimatorSet(); as.playTogether(moveX, moveY); as.start(); 

La respuesta de Budius me parece perfectamente útil.

Estos son los objetos de animación que utilizo:

Propósito: Mover Vista "vista" a lo largo del Camino "ruta"

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]); } }); 

Similar a: Android, mover mapa de bits a lo largo de un camino?

Juega con los interpoladores. Por ejemplo, establezca 2 Interpoladores diferentes para x e y:

 moveX.setInterpolator(new AccelerateDecelerateInterpolator()); moveY.setInterpolator(new DecelerateInterpolator()); 

Theres más (LinearInterpolator, AccelerateInterpolator …) pero creo que esto debería ser la combinación que desea.

Gracias por las respuestas, pero encontré mi propia answer.Just agregó algunas posiciones x, y extra en el stmt Objectanimator. Fue a esas posiciones antes de llegar a la final y trazado un camino!

 ObjectAnimator moveX = ObjectAnimator.ofFloat(stone, "x", catPos[0]-20,catPos[0]-10,catPos[0] ); ObjectAnimator moveY = ObjectAnimator.ofFloat(stone, "y",catPos[1]-20,catPos[1]-10, catPos[1] ); 

usted tiene dos opciones:

ambos necesitan un objeto Path que define tu curva:

 Path path = new Path(); path. // define your curve here 

si utiliza sólo Lollipop (API 21) use ObjectAnimator.ofFloat (… path) como este:

 ObjectAnimator.ofFloat(stone, View.X, View.Y, path).start(); 

si eso no es una opción, se utiliza un AnimatorListener para recibir actualizaciones sobre el marco de cada animador y utilizar el PathMeasure para obtener los valores en ese punto, como esto:

 PathMeasure pm; float point[] = {0f, 0f}; private final ValueAnimator.AnimatorUpdateListener listener = new ValueAnimator.AnimatorUpdateListener(){ @Override public void onAnimationUpdate (ValueAnimator animation) { float val = animation.getAnimatedFraction(); pm.getPosTan(pm.getLength() * val, point, null); stone.setTranslationX(point[0]); stone.setTranslationY(point[1]); } } // and then to animate pm = new PathMeasure(path, false); ValueAnimator a = ValueAnimator.ofFloat(0.0f 1.0f); a.setDuration(/* your duration */); a.setInterpolator(/* your interpolator */); a.addUpdateListener(listener); a.start(); 

La clase Path tiene métodos para crear líneas no rectas de varios tipos; arcos, círculos, óvalos, rectángulos, curvas cúbicas y cuadráticas de bezier, que luego puede animar su objeto a lo largo.

Como señala Budius, necesitas codificar para API 21 (Lollipop) o más tarde para utilizar rutas con traducción de objetos. Ahora tiene más de dos años.

Por otro lado, parece que hay una escasez de cualquier cosa-más-que-muy-simples ejemplos de la utilización de caminos "en el medio silvestre", por lo que tal vez hay una razón que no han capturado todavía.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.