Jump to content

XML, visibility, progressbar & translation


BapNesS
 Share

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.

Link to comment
Share on other 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

Link to comment
Share on other 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
Link to comment
Share on other sites

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...