web-dev-qa-db-fra.com

Slidedown et slideup layout avec animation

comment puis-je afficher une mise en page au centre avec slide Up quand j'appuie sur le bouton, et appuie à nouveau pour cacher ... slideDown in Android

aidez-moi avec ça, pense

40
EliasM

Créez deux animations xml dans le dossier res/anim

slide_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" >

<translate
    Android:duration="1000"
    Android:fromYDelta="0"
    Android:toYDelta="100%" />
</set>

slide_up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" >

<translate
    Android:duration="1000"
    Android:fromYDelta="100%"
    Android:toYDelta="0" />
</set>

Charger l'animation Comme ci-dessous Code et lancer l'animation quand vous le souhaitez En fonction de vos besoins

//Load animation 
Animation slide_down = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.slide_down);

Animation slide_up = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.slide_up);

// Start animation
linear_layout.startAnimation(slide_down); 
115
Ando Masahashi

J'utilise ces fonctions simples, cela fonctionne comme jquery slideUp slideDown, utilisez-le dans une classe d'assistance, passez simplement votre vue:

public static void expand(final View v) {
    v.measure(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
    final int targetHeight = v.getMeasuredHeight();

    // Older versions of Android (pre API 21) cancel animations for views with a height of 0.
    v.getLayoutParams().height = 1;
    v.setVisibility(View.VISIBLE);
    Animation a = new Animation()
    {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            v.getLayoutParams().height = interpolatedTime == 1
                    ? WindowManager.LayoutParams.WRAP_CONTENT
                    : (int)(targetHeight * interpolatedTime);
            v.requestLayout();
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }
    };

    // 1dp/ms
    a.setDuration((int) (targetHeight / v.getContext().getResources().getDisplayMetrics().density));
    v.startAnimation(a);
}

public static void collapse(final View v) {
    final int initialHeight = v.getMeasuredHeight();

    Animation a = new Animation()
    {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            if(interpolatedTime == 1){
                v.setVisibility(View.GONE);
            }else{
                v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
                v.requestLayout();
            }
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }
    };

    // 1dp/ms
    a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density));
    v.startAnimation(a);
}
25
neoteknic

Cela ne fonctionne pas pour moi, je veux aimer la fonction jQuery slideUp/slideDown, j'ai essayé ce code, mais il ne fait que déplacer le contenu qui reste au même endroit après la fin de l'animation, la vue devrait avoir une hauteur de 0dp au début de slideDown et la hauteur de vue (avec wrap_content) après la fin de l'animation.

3
neoteknic

J'avais une exigence similaire dans l'application sur laquelle je travaille. Et, j'ai trouvé une bibliothèque tierce qui fait glisser, glisser et glisser vers la droite dans Android.

Reportez-vous au lien pour plus de détails: https://github.com/mancj/SlideUp-Android

Pour configurer la bibliothèque (copiée à la demande à partir de la partie Lisez-moi de sa page Github):

Récupère la bibliothèque SlideUp

Ajoutez le référentiel JitPack à votre fichier de construction. Ajoutez-le dans votre racine build.gradle à la fin des référentiels:

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
    maven { url "https://maven.google.com" } // or google() in AS 3.0
  }
}

Ajoutez la dépendance (dans la palette Module)

dependencies {
    compile 'com.github.mancj:SlideUp-Android:2.2.1'
    compile 'ru.ztrap:RxSlideUp2:2.x.x' //optional, for reactive listeners based on RxJava-2
    compile 'ru.ztrap:RxSlideUp:1.x.x' //optional, for reactive listeners based on RxJava
}

Pour ajouter le SlideUp à votre projet, suivez ces trois étapes simples:

Étape 1:

créer tout type de mise en page

<LinearLayout
  Android:id="@+id/slideView"
  Android:layout_width="match_parent"
  Android:layout_height="match_parent"/>

Étape 2:

Trouver cette vue dans votre activité/fragment

View slideView = findViewById(R.id.slideView);

Étape 3:

Créer un objet SlideUp et passer dans votre vue

slideUp = new SlideUpBuilder(slideView)
                .withStartState(SlideUp.State.HIDDEN)
                .withStartGravity(Gravity.BOTTOM)

                //.withSlideFromOtherView(anotherView)
                //.withGesturesEnabled()
                //.withHideSoftInputWhenDisplayed()
                //.withInterpolator()
                //.withAutoSlideDuration()
                //.withLoggingEnabled()
                //.withTouchableAreaPx()
                //.withTouchableAreaDp()
                //.withListeners()
                //.withSavedState()
                .build();

Vous pouvez également vous référer à l'exemple de projet sur le lien. Je l'ai trouvé assez utile.

0
sayleep