Aller au contenu

XML, visibility, progressbar & translation


BapNesS

Recommended Posts

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

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.

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...