[Android] Crear un efecto de zoom desplegable
(De hecho, los estudiantes en iOS lo juegan a voluntad cuando implementan funciones).
El efecto probablemente valga la pena:
Después de leer la interfaz de usuario,
p>
“Esto funciona bien”.
“¿Por qué no hacerlo en Android?” Entonces ~ ~
Como aspirante a programador, decidí para lograr este efecto (Mi mente está llena de caballos de pasto y barro)
Tal efecto~ ~
Usando un ViewGroup personalizado y mediante procesamiento de gestos, debería ser posible, ¿verdad?
Debería dividirse principalmente en dos partes:
La parte más problemática debería estar en la primera parte, que requiere una cierta comprensión de la distribución de eventos.
Cuando se trata de juzgar gestos, es inevitable lidiar con la distribución de eventos.
Parte desplegable
1. Manejar el evento en onInterceptTouchEvent. Si es un evento desplegable, intercepte el evento y entréguelo a onTouchEvent para su procesamiento.
2. Calcule la distancia desplegable en onTouchEvent y luego cambie dinámicamente la configuración del encabezado para lograr el efecto de amplificación.
Restablecer partes
Restablecer el encabezado en ACTION_UP de onTouchEvent para lograr el rebote.
Después de conocer la idea, es relativamente sencilla de implementar.
Cree un ViewGroup (de ahí el nombre FlexibleLayout) para heredar LinearLayout.
Procesamiento de onInterceptTouchEvent
Primero, si se trata de un evento desplegable se juzga por dos condiciones:
Luego marque el inicio del arrastre a través de mIsBeingDragged.
Procesamiento OnTouchEvent
Modificar el tamaño del encabezado
Después de obtener la distancia desplegable, puede lograr el efecto de ampliación cambiando el tamaño del encabezado.
Puedes reproducir libremente las partes amplificadas y reseteadas.
Aquí utilizamos las matemáticas. Pow (desplazamiento, 0,8) aumenta la altura real y se calcula el ancho y el desplazamiento correspondientes (similar al efecto de amortiguación).
Restablecer el cabezal
Simplemente establezca el ancho, el alto y el desplazamiento directamente a los parámetros originales.
(Si cree que el proceso de reinicio no es lo suficientemente fluido, puede lograr un efecto de reinicio fluido mediante una animación, que no se demostrará aquí).
En este punto, un Se completa el simple efecto desplegable y de acercamiento. Pruebe el efecto
Usando
Simplemente coloque FlexibleLayout en el diseño que debe desplegarse y ampliarse, como ScrollView.
Afectar
Vista de desplazamiento:
Vista de reciclaje:
Diseño CoordinatorLayout:
¡Ya terminaste! ! !
Por supuesto, también hay algunos detalles que tratar, como las condiciones del menú desplegable, la animación del rebote, la altura máxima, etc. El contenido específico se puede ver en el código fuente.
Después de completar el menú desplegable para acercar, parece que me he olvidado de una función muy importante.
¿Qué debo hacer si uso este tipo de menú desplegable para acercar y actualizar? ¿Qué?
Esta función se dejará hasta la próxima semana Mis 7 horas de sueño aún están lejos~~
Aunque no hay una función de actualización desplegable directa, sí un monitor desplegable. ha sido expuesto en el código fuente, también puede implementar la operación de actualización desplegable a través de este monitor.
Ya está aquí
(Para pagar la deuda adeudada la semana pasada~~)
Similar al zoom desplegable, al monitorear el deslizamiento del dedo, use el ver Traslación y rotación para lograr movimiento y rotación.
El proceso de implementación específico no se publicará aquí, solo mire el efecto.
Si estás interesado, puedes ir directamente a Github para ver el código fuente y su uso.
Base de código fuente abierta
PullZoomView
El mecanismo de distribución de eventos de Android se presenta en detalle, te lo mereces.