Cómo implementar la animación de texto de lista personalizada

Estoy creando la aplicación de compras en android. En mi aplicación, muestro la lista de elementos desde la vista de lista personalizada.

Si el cliente selecciona un elemento, el texto del elemento seleccionado se mueve de listview a la imagen del carrito de la compra. Como debajo de la imagen,

Este tipo de animación es mi requisito. Introduzca aquí la descripción de la imagen

Pero mi vista animada se detuvo al final de la fila personalizada .. como esta imagen.

Introduzca aquí la descripción de la imagen

Mi código animation.xml,

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator" android:fillAfter="true" > <translate android:fromYDelta="0%p" android:toYDelta="100%p" android:fromXDelta="0%p" android:toXDelta="100%p" android:duration="1000" /> <alpha android:duration="500" android:fromAlpha="1.0" android:interpolator="@android:anim/accelerate_interpolator" android:toAlpha="0.0" /> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3500" android:fromXScale="1.0" android:fromYScale="1.0" android:toXScale="0.0" android:toYScale="0.2" > </scale> </set> 

Nota: Si alguien quiere más código que posteo más tarde .. porque ya este qtn tomar más longitud ..

Mi pregunta,

Mi vista de texto animada no puede superar la línea personalizada de fila.

Así que ¿Cómo mover la fila personalizada textview en el final de la imagen (imagen del carrito de la compra)?

El objetivo es animar la vista de un lugar a otro, así que primero necesitamos obtener los dos puntos. Puede hacer lo siguiente:

 int[] screenLocation = new int[2]; textView.getLocationOnScreen(screenLocation); int startX = screenLocation[0]; int startY = screenLocation[1]; int[] screenLocationB = new int[2]; cartView.getLocationOnScreen(screenLocationB); int endX = screenLocationB[0]; int endY = screenLocationB[1]; 

Una vez que tengas tanto la ubicación inicial de la vista de texto como la ubicación en la que quieres que finalice en (ubicación de la vista de carrito), necesitamos animar desde un punto dos el siguiente. Podemos hacer esto colocando un NUEVO textview en la capa de ventana o un framelayout por encima de su listview.

Aquí añadimos a la capa de ventana:

 WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); layoutParams.width = view.getMeasuredWidth(); layoutParams.height = view.getMeasuredHeight(); activity.addContentView(newTextView, layoutParams); 

A continuación fijamos la posición inicial.

  newTextView.setTranslationX(startX); newTextView.setTranslationY(startY); 

Finalmente animamos.

  newTextView.animate().setDuration(300) .translationX(endX).translationY(endX).start() 

Creo que esto es lo que usted está cuidando. Puede utilizar algo llamado Ver superposición . Lo que usted requiere es similar a la primera animación donde el botón está cayendo de su marco a la parte inferior de la pantalla.

El resumen es el siguiente

  final Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // Our button is added to the parent of its parent, the most top-level layout final ViewGroup container = (ViewGroup) button.getParent().getParent(); container.getOverlay().add(button); ObjectAnimator anim = ObjectAnimator.ofFloat(button, "translationY", container.getHeight()); //You dont need rotation ObjectAnimator rotate = ObjectAnimator.ofFloat(button, "rotation", 0, 360); rotate.setRepeatCount(Animation.INFINITE); rotate.setRepeatMode(Animation.REVERSE); rotate.setDuration(350); /* * Button needs to be removed after animation ending * When we have added the view to the ViewOverlay, * it was removed from its original parent. */ anim.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator arg0) { } @Override public void onAnimationRepeat(Animator arg0) { } @Override public void onAnimationEnd(Animator arg0) { container.getOverlay().remove(button); } @Override public void onAnimationCancel(Animator arg0) { container.getOverlay().remove(button); } }); anim.setDuration(2000); AnimatorSet set = new AnimatorSet(); set.playTogether(anim, rotate); set.start(); } }); 

En su caso es necesario identificar el contenedor correctamente. Debe ser la vista de la raíz de la actividad. También el botón en el ejemplo es la vista que usted estará animando (nombre de la canción). Finalmente haga la traducción según su requisito.

Establecer android:clipChildren="false" en la vista principal de TextView, así como cualquier vista de abuelo que cubre el rango que desea animar dentro.

  • ¿Cómo implementar un CustomView con estados selectores personalizados?
  • Tome la foto de lo que hay dentro de los límites de superposición
  • ¿Cuál es el punto de declarar-estilo?
  • Uso de atributos personalizados en vistas personalizadas mientras está en el diseño de vista previa
  • Menú círculo Android como notas de captura
  • Pasar id de la vista adyacente en xml a la vista personalizada y recuperarla en el constructor de la vista personalizada
  • Vista personalizada no puede obtener el identificador de actividad de View.getContext
  • ¿Cómo crear el diseño de una vista personalizada de forma programática?
  • ¿Cómo implementar una interfaz de usuario similar a la UI de aplicaciones recientes de Lollipop?
  • ¿Cómo agregar las burbujas a textview android?
  • ¿Cómo configurar varios oyentes de clics en diferentes palabras de textview?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.