Me gustaría hacer un control simple: un contenedor con una vista interior. Si toco el contenedor y muevo el dedo, quiero mover la vista para seguir mi dedo.
¿Qué tipo de contenedor (diseño) debo usar? ¿Como hacer esto?
No necesito usar una superficie, sino un diseño simple.
Respuestas:
Algo como esto:
En
main.xml
soloRelativeLayout
con@+id/root
fuente
layoutPrarms.rightMargin = -250
y lo mismo conbottomMargin
!! ¿Puedes explicarlo? ¡¡De todos modos, muchas gracias!!He encontrado un enfoque fácil para hacerlo con ViewPropertyAnimator:
fuente
setX
ysetY
directamente, en lugar de aplicar una animación de duración 0.Siguiendo el enfoque @Andrey, si desea mover la vista desde su centro, solo tiene que restar la mitad de la altura y el ancho de la vista al movimiento.
fuente
Misma implementación en Kotlin
fuente
Toque el contenedor y la vista seguirá su dedo.
código xml
Código Java
fuente
Recomiendo usar view.translationX y view.translationY para mover sus vistas.
Fragmento de Kotlin:
fuente
Cree una clase de escucha táctil personalizada (en Kotlin):
(Este código restringe su vista para que no se arrastre fuera de su vista principal)
¿Cómo usarlo?
parentView
es el padre de tu punto de vista.fuente
En el siguiente código, he creado algo llamado
RegionView
( git ), que es un contenedor reutilizable responsable de administrar las operaciones de arrastrar y hacer zoom para cada uno de sus hijos anidados.Aquí, la manipulamos
top
yleft
coeficientes de un niñoView
'sLayoutParams
para simular el movimiento sobre el diagrama. Al desacoplar la interpretación de manejar lo que se entiende como una operación de arrastre, y lo que se determina que es una operación de escala, podemos proporcionar una manipulación confiable de un niñoView
.Aquí les muestro un ejemplo de caso de uso:
fuente
Cambió un poco la solución proporcionada por @Vyacheslav Shylkin para eliminar las dependencias de cualquier número ingresado manualmente.
fuente
En este ejemplo, puede mover la vista dentro de sus límites primarios sin importar su tamaño, animación perfecta y capturar clics.
La razón por la que esta solución es superior a otros comentarios es que este enfoque utiliza un Pad direccional que se calcula a sí mismo y no se transmitirá en las posiciones de Vista, que es la fuente de muchos errores.
Si tiene el contenedor dentro de un ScrollView o ScrollView de doble dimensión, debe agregar esta línea al onTouch
fuente
Lo mismo que @ la respuesta de Alex Karshin , cambio un poco.
fuente