8
votes

Android Viewgroup.SetScalex () Parce que la vue soit coupée


2 commentaires

Qu'attendez-vous que le résultat ressemble?


Quelque chose comme MapView. Que la mise en page ( myLayout ) remplit l'écran entier et non coupé dans la photo 2. Pic. LayoutParam de MyLayout sont définis Match_Parent.


5 Réponses :


0
votes

Si je comprends votre problème correctement, vous mettez en scène un groupe de visualisation et vous attendez à ce que les vues incluses à l'échelle en conséquence. Cela ne fonctionne pas de cette façon: vous échouez au groupe d'affichage et change de taille, mais ses enfants vues ne le font pas.

Échelle de toutes les sous-espions. Malgré tout, je ne suis pas sûr que les textes et les images seront automatiquement mis à l'échelle. Ce que vous voulez, c'est zoom, pas à l'échelle. Essayez Cette référence .


2 commentaires

Quelle est la différence entre zoom and échelle? La photo 2 montre que les travaux de zoom / échelle (MSCALE ~ 0.8). C'est juste que le groupe de visit est coupé.


Je prends la retraite ma réponse alors, désolé pour le bruit.



1
votes

Depuis le niveau de l'API 11, la classe code> Classe est SetScalex () code> et SetScaley () code> méthodes, qui fonctionnent comme prévu et aussi -Vues de la vue à l'échelle. Donc, si cela serait un moyen pour vous, déposez la bibliothèque et faites simplement

v.setScaleX(mScale);
v.setScaleY(mScale);


1 commentaires

J'ai essayé avant. Il a le même effet de coupure. En fait, la bibliothèque est juste un proxy. Sur ICS les NineOldAndroids appellent tout simplement la même méthode.



3
votes

au cas où n'importe qui est entré dans la même situation que moi. J'ai fini par utiliser cette approche:

protected void setScale(float scale, boolean updateView) {
    mScale = scale;
    if (updateView) {
        LayoutParams params = getLayoutParams();
        onUpdateScale(scale, params);
        setLayoutParams(params);
    }
}

protected void onUpdateScale(float scale, LayoutParams params) {
    params.leftMargin = (int) (mModel.getX() * scale);
    params.topMargin = (int) (mModel.getY() * scale);
    params.width = (int) (mModel.getWidth() * scale);
    params.height = (int) (mModel.getHeight() * scale);
}


4 commentaires

Cette approche est-elle rapide? Je veux dire, faites-vous trop de mises à jour en utilisant quelque chose comme un geste à l'échelle, ou que vous comprenez seulement une fois à l'époque?


Je n'ai pas encore exécuté de points de repère ou de traceview, mais cela fonctionne bien sur Xoom 1 et Nexus S. Les exigences étaient que le déplacement et la mise à l'échelle doivent se produire de manière continue (comme Google Maps) et non une fois que l'interaction est terminée (comme zoomer Osmtracker). .


Alors, pas de scintillage? (+1 si vous répondez non :-))


Malheureusement, il scintille parfois (zoomer uniquement). Si vous résolvez cela, ajoutez une autre réponse ici :)



0
votes

Utilisez Viewgroup.Layout. C'est peut-être le moyen le plus simple d'échelonner (& bouger) groupe de visit.


0 commentaires

4
votes

Le parent de votre vue doit avoir la propriété Android: Clipchildren Désactivé (à partir du fichier de mise en page ou avec SetClipChildren (false) ).

mais avec cette méthode Ne recevez pas les événements tactiles en dehors des limites du clip de vue. Vous pouvez contourner de vous en envoyer de votre activité ou en écrivant un groupe de visitères personnalisé parent.

J'utilise un piratage différent qui semble fonctionner dans mon cas, l'astuce est de Maintenir votre propre matrice de transformation. Ensuite, vous devez surcharger une méthode de la méthode GROUPE pour le faire fonctionner. Par exemple: xxx


2 commentaires

Vous pouvez obtenir la matrice de la vue. View.getmatrix () puis Invert IT, M.INVERT (M) et utilisez-le pour élaborer l'événement de mouvement.


J'ai essayé quelques hacks différents de fausses vues qui ont simplement relayé la touche brute qui a ensuite été transformée par la matrice de vues. Et la seule chose qui ait jamais travaillé systématiquement sur tout le matériel, j'ai accès à ma propre matrice et à utiliser cela pour transformer les motionvents, la vue et les rectangles invalidés.