2011-04-27 3 views
4

je une mise en page structurée comme suit:Android ScaleAnimation n'échelle zone cliquable

LinearLayout1
        LinearLayout2
                EditText

Je demande un ScaleAnimation à LinearLayout1 à l'aide d'un LayoutAnimationController afin que toutes les vues de la hiérarchie soient mises à l'échelle du même montant. Après l'application de ScaleAnimation, les vues sont mises à l'échelle correctement, mais EditText ne répond plus aux clics qui se trouvent hors de l'espace initialement occupé. En d'autres termes, il semble que la zone cliquable pour EditText ne soit pas mise à l'échelle avec la représentation visuelle.

Existe-t-il une solution à ce problème ou est-ce qu'il me manque avant ou après l'appel de ScaleAnimation?

Répondre

3

Si quelqu'un d'autre cherche la solution à ce problème, voici la solution que j'ai trouvée. Je capture des événements de clic dans LinearLayout1 et effectue un test d'impact récursif manuel dans la hiérarchie de vue en utilisant getHitRect et en appliquant le facteur d'échelle aux dimensions reçues.

Voici ma mise en œuvre du test d'accès pour une vue.

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); 
} 
+1

Je suis confronté au même scénario ... quand appelez-vous ce scaledHitTest? – user1201239