Android: Informer le Scrollview qu'il est enfant, le changement de taille: comment faire?
Quand je agrandir la taille du contenu d'un scrollview, la scrollview prend un certain temps pour "faire connaissance" avec ce changement de taille de l'enfant. Comment puis-je commander la ScrollView pour vérifier qu'il est enfant tout de suite?
J'ai une ImageView dans un LinearLayout dans un ScrollView.
Dans mon ScaleListener.onScale, j'ai changer la taille de mon LinearLayout. J'ai ensuite essayer de l'ordre d'un rouleau sur la scrollview. Dans le ScaleListener.onScale:
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) imageView.getLayoutParams();
params.width = (int) (startX * scaleFactor);
params.height = (int) (startY * scaleFactor);
imageView.setLayoutParams(params);
(...)
scrollView.scrollBy(scrollX, scrollY);
Cependant, pas de défilement se produit lorsque la situation avant la mise à l'échelle de défilement n'était pas possible, parce que la vue était trop petite pour faire défiler. Après la setLayoutParams, la vue doit être plus grand, mais pas de défilement se produit parce que le scrollview pense que l'enfant est encore petit.
Lorsqu'un de fes ms plus tard le onScroll est appelée de nouveau, il ne défilement fine, c'est en quelque sorte découvert que l'enfant est plus grand et défilement.
Comment puis-je en informer le scrollview immédiatement, que la taille de l'enfant a changé? De sorte que scrollBy va travailler après setLayoutParams sur son enfant?
OriginalL'auteur Frank | 2012-04-03
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution après avoir essayé à peu près tous les
onXXX()
méthode. onLayout peut être utilisé. Vous pouvez planifier le défilement et le faire plus tard dansonLayout()
.Prolonger votre scrollview, et d'ajouter:
Maintenant, pour l'utiliser dans votre code, au lieu de
scrollBy(x,y)
utilisationplanScrollBy(x,y)
. Il ne le faites défiler jusqu'à un moment où la nouvelle taille de l'enfant est "connu", mais n'est pas affichée sur l'écran encore.Lorsque vous utilisez l'horizontale ou à la verticale scrollview, bien sûr, vous pouvez seulement faire défiler une façon, de sorte que vous aurez à modifier ce code un peu (ou pas, mais il ignore le défilement sur l'autre axe). J'ai utilisé un
TwoDScrollView
, vous pouvez le trouver sur le web.OriginalL'auteur Frank
Vous pouvez appeler le:
OriginalL'auteur Ngoc Dao