BapNesS Posté(e) 29 juin 2012 Posté(e) 29 juin 2012 Bonjour, J'essaie de placer une animation dans mon activity cependant le résultat me laisse perplexe. Dans mon XML j'ai une ProgressBar en visibility=gone. J'aimerais faire apparaître cette ProgressBar en faisant une translation à partir du haut de l'écran. Ce que je fais : progressBar.setVisibility(View.VISIBLE); progressBar.startAnimation(…); Petit schéma pour visualiser le problème : https://docs.google.com/drawings/d/1UC57IIDN6d7Zg1wG4Nz4JfocgUxhYJCHlwVzMpFziK4/edit Le problème est que le setVisibility alloue la hauteur entière de la ProgressBar alors que j'aurais voulu un glissement de type tiroir (l'exemple de JQuery sur le menu de mon blog me parle) pour faire apparaître cette ProgressBar. Quelqu'un aurait une solution ? Merci. Citer
Bismuth76 Posté(e) 5 juillet 2012 Posté(e) 5 juillet 2012 Salut Ouais, dès que tu fais setVisibility, il affecte direct la hauteur... :/ N'y a-t-il pas moyen de faire un truc (peut-être un peu crassouillou) du genre, mettre ta progress bar dans un relative layout (en la collant sur le bas du layout) et animer la hauteur du layout ? J'ai aucune idée du comportement que ça peut avoir \o/ Bon courage ;) (et effectivement, j'ai un collègue qui a rencontré le problème sur un dev mais n'a eu le temps ni de chercher une solution, ni de faire la modif :/) A plus Citer
ygort Posté(e) 14 juillet 2012 Posté(e) 14 juillet 2012 Salut, Je suis passé par là et la solution que j'ai trouvé est de faire une animation custom dans laquelle tu set la hauteur de ton element: public class AdvertAnimation extends Animation { private View mViewAdvert; private int mTargetHeight; private boolean mIn; public AdvertAnimation(View advert, boolean in){ mViewAdvert = advert; setDuration(500); if(in) mViewAdvert.getLayoutParams().height = 0; else mTargetHeight = advert.getHeight(); mIn = in; } public void setTargetHeight(int h){ mTargetHeight = h; } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { int nHeight; if(mIn)nHeight = (int) (interpolatedTime * mTargetHeight); else nHeight = (int)((1-interpolatedTime) * mTargetHeight); mViewAdvert.getLayoutParams().height = nHeight; mViewAdvert.requestLayout(); } @Override public boolean willChangeBounds() { return true; } } J'espere que ca repond en partie a ton probleme. 1 Citer
BapNesS Posté(e) 25 juillet 2012 Auteur Posté(e) 25 juillet 2012 Je me mets un reminder pour tester ça dès que possible. Merci d'avance. Citer
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.