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,
- ¿Canvas.getClipBounds asigna un objeto Rect?
- Cómo implementar el patrón Decorator para las vistas de Android
- Las vistas dentro de un Grupo de vistas personalizado no se muestran
- OnDraw eficiente de ArrayList
- Android: Inicia la barra de progreso circular desde la parte superior (270 °)
Este tipo de animación es mi requisito.
Pero mi vista animada se detuvo al final de la fila personalizada .. como esta 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)?
- Vista personalizada de Android Center en la barra de acciones
- ¿Por qué el camino dibujado en escala GLES20RecordingCanvas y lienzo simple tiene cualidades diferentes?
- Cambiar el valor del borde de desvanecimiento de NumberPicker o cambiar alfa del texto superior / inferior
- Bug con Android 4.3 ImageView método getImageMatrix ()
- Cambiar a Gradle: ¿por qué tengo que mantener las vistas personalizadas de ser ofuscada?
- Leer atributos de Android en mi vista personalizada
- Los hijos de LinearLayout extendido definidos en XML no muestran
- Obtener contacto Foto basada en Teléfono de contacto Android - Ejemplo de trabajo
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.