Android ScaleAnimation no escala el área seleccionable
Tengo un diseño estructurado de la siguiente manera:
LinearLayout1
LinearLayout2
Editar texto
- Cómo restringir los caracteres especiales de un campo Android EditText?
- Android: No se puede escribir en un EditText
- SoftKeyboard abrir y cerrar escucha en una actividad en Android?
- Añadir un título o una descripción a un EditText
- EditText OnKeyListener no funciona
Estoy aplicando un ScaleAnimation a LinearLayout1 usando un LayoutAnimationController para que todas las vistas de la jerarquía se escalen por la misma cantidad.
Después de aplicar ScaleAnimation, las vistas están todas escaladas correctamente, pero el EditText ya no responde a los clics que caen fuera del espacio que ocupó originalmente. En otras palabras, parece que el área seleccionable para el EditText no se escala junto con la representación visual.
¿Hay una solución a este problema o me falta antes o después de llamar a ScaleAnimation?
- Teclado personalizado: manejo del tipo de entradaTipo
- Cambiar color de sugerencia de EditText cuando se utiliza TextInputLayout
- Android: Force EditText para eliminar el enfoque?
- Personalizar Edittext carácter de entrada a la imagen?
- Sugerencia de posicionamiento dentro de varias líneas EditText - TextInputLayout
- Small EditText tiene un setError con un montón de líneas
- EditText como parte de HeaderView pierde foco en la entrada
- Android: ¿Cómo puedo validar la entrada de EditText?
En caso de que alguien está buscando la respuesta a este problema, aquí está la solución que me ocurrió. Captura los eventos de clic en LinearLayout1 y realizo una prueba de éxito recursivo manual en la jerarquía de vistas usando getHitRect y aplicando el factor de escala a las dimensiones recibidas.
Esta es mi implementación de la prueba de éxito para una vista.
public boolean scaledHitTest(float zoomScale, int x, int y) { Rect rect = new Rect(); getHitRect(rect); rect.top = (int) (rect.top * zoomScale); rect.bottom = (int) (rect.bottom * zoomScale); rect.left = (int) (rect.left * zoomScale); rect.right = (int) (rect.right * zoomScale); return rect.contains(x, y); }
- ¿Es seguro pasar la instancia de una Actividad a otro objeto?
- Reproductor de medios para Android Decibel Reading