Android-Animation in Java einblenden und ausblenden

Lesezeit: 6 Minuten

Android Animation in Java einblenden und ausblenden
Pflüger

Ich möchte eine 2-Sekunden-Animation einer ImageView haben, die 1000 ms zum Einblenden und dann 1000 ms zum Ausblenden verbringt.

Folgendes habe ich bisher in meinem ImageView-Konstruktor:

Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setDuration(1000);

Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1000);

AnimationSet animation = new AnimationSet(true);
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
this.setAnimation(animation);

Wenn ich diese Animation ausführe, nichts auftaucht. Wenn ich jedoch eine der Alpha-Animationen entferne, funktioniert das Verhalten wie erwartet.

Dinge, die ich bereits ausprobiert habe:

  • Jede erdenkliche Kombination von setFillBefore, setFillAfterund setFillEnabled.
  • Hinzufügen eines LinearInterpolator zum AnimationSet.

  • Ja, Sie können Bilder ein- und ausblenden! Dieses Tutorial sollte den Trick machen. sankarganesh-info-exchange.blogspot.com/2011/04/…

    – Adam Sturm

    22. Juli 11 um 22:40 Uhr


  • Dieses Tutorial beschreibt eine Methode, die XML verwendet. Wissen Sie, wie Sie dasselbe mit Java erreichen können?

    – Pflüger

    23. Juli 11 um 0:30 Uhr

  • Nun, ich bin nicht neben meinem Programmiercomputer, also kann ich diesen Code nicht testen, aber Sie können XML-Attribute in Java setzen. das ist der Originalcode: android:interpolator=”@android:anim/accelerate_interpolator” android:fromAlpha=”0.0″ android:toAlpha=”1.0″ android:duration=”300″ /> n also kannst du wahrscheinlich MyTween.setDurationg (300) MyTween.fromAlpha(0.0) MyTween(1.0)

    – Adam Sturm

    23. Juli 11 um 17:27 Uhr


Android Animation in Java einblenden und ausblenden
Pflüger

Habe mein eigenes Problem herausgefunden. Die Lösung basierte schließlich auf Interpolatoren.

Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setInterpolator(new DecelerateInterpolator()); //add this
fadeIn.setDuration(1000);

Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setInterpolator(new AccelerateInterpolator()); //and this
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1000);

AnimationSet animation = new AnimationSet(false); //change to false
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
this.setAnimation(animation);

Wenn Sie Kotlin verwenden

val fadeIn = AlphaAnimation(0f, 1f)
fadeIn.interpolator = DecelerateInterpolator() //add this
fadeIn.duration = 1000

val fadeOut = AlphaAnimation(1f, 0f)
fadeOut.interpolator = AccelerateInterpolator() //and this
fadeOut.startOffset = 1000
fadeOut.duration = 1000

val animation = AnimationSet(false) //change to false
animation.addAnimation(fadeIn)
animation.addAnimation(fadeOut)
this.setAnimation(animation)

  • Was ist, wenn Sie 5 oder 6 Ein-/Ausblendungen mit wirklich kleinen Verzögerungen wie 100 für jede machen möchten, könnten Sie so etwas verwenden? Ich habe es versucht, aber es ist nicht wirklich flüssig. Ziel war es, zum Beispiel eine Glühbirne zu simulieren, die nicht richtig funktionieren und funkeln würde.

    – Chayy

    12. August 11 um 16:36 Uhr

  • Versuchen Sie, this.setAnimation in einer Schleife aufzurufen

    – Jonathan

    30. Juli 13 um 15:00 Uhr

  • Ich dachte, ich würde das letzte bg-Bild ausblenden und das aktuelle einblenden, aber diese Antwort inspiriert mich, dass ich nur das aktuelle bg-Bild einblenden und das aktuelle ausblenden muss, da AlphaAnimation nicht zwei verschiedene Bilder ein- / ausblenden kann .

    – macio.Jun

    3. Februar 14 um 18:20 Uhr

  • Ich glaube nicht, dass Sie zwei unabhängige Animationen haben müssen … Ich denke, Sie könnten eine einzelne Animation haben und den Parameter festlegen: fadeInOut.setRepeatMode(Animation.REVERSE);

    – RoundSparrow hilltx

    30. September 14 um 14:03 Uhr

  • Zweitens: Wenn Sie wiederholen möchten, müssen Sie nicht in einer Schleife anrufen, wie @jonney sagte. Verwenden Sie fadeInOut.setRepeatCount(6) – ändern Sie 6 so, wie viele Sie wiederholen möchten. Viel weniger Overhead, um all dies den nativen C++-Code in Android erledigen zu lassen, anstatt eine Java-Schleife aufzurufen.

    – RoundSparrow hilltx

    30. September 14 um 14:04 Uhr

Android Animation in Java einblenden und ausblenden
Konrad Winkowski

Ich weiß, dass dies schon beantwortet wurde, aber…..

<?xml version="1.0" encoding="utf-8"?> 
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0" 
    android:toAlpha="0.0" 
    android:duration="1000"    
    android:repeatCount="infinite" 
    android:repeatMode="reverse"
    />

Schnelle und einfache Methode zum schnellen Ein- und Ausblenden mit einer Selbstwiederholung. Genießen

BEARBEITEN : Fügen Sie in Ihrer Aktivität Folgendes hinzu:

yourView.startAnimation(AnimationUtils.loadAnimation(co‌​ntext, R.anim.yourAnimation));

  • +1 Weil ich mit dieser Antwort eine Sequenz aus Einblenden, Ausblenden und Einblenden machen könnte (einfach repeatCount=”2″ setzen). Ich konnte Animationen nicht verketten, wie die akzeptierte Antwort vorschlägt.

    – ElYeante

    10. Februar 14 um 14:50 Uhr


  • Nachdem Sie dies erklärt haben alpha Ressource, wie kann ich sie verwenden?. Danke

    – Zozelfelfo

    17. März ’14 um 12:00 Uhr

  • zozelfelfo Es ist nur eine Animations-XML, also laden Sie sie in den Code und rufen Sie dann startAnimation für die gewünschte Ansicht auf.

    – Konrad Winkowski

    18. März 14 um 13:53 Uhr

  • @KonradWinkowski startAnimation Methode erfordert Animationsobjekt als Argument! was soll ich dazu geben?

    – Ahmad Watani

    24. Juli 15 um 7:48 Uhr

  • Für diejenigen, die eine vollständigere Antwort suchen: viewToAnimate.startAnimation(AnimationUtils.loadAnimation(context, R.anim.fade_in_out)wo es eine fade_in_out.xml-Datei im anim-Ordner unter res gibt.

    – Chris Ritter

    10. Oktober 17 um 22:50 Uhr

viewToAnimate.animate().alpha(1).setDuration(1000).setInterpolator(new DecelerateInterpolator()).withEndAction(new Runnable() {
    @Override
    public void run() {
        viewToAnimate.animate().alpha(0).setDuration(1000).setInterpolator(new AccelerateInterpolator()).start();
    }
}).start();

  • Elegante für Marshmallow!

    – Edi

    26. Februar 16 um 17:03 Uhr

  • Ein wichtiger Punkt ist, dass Sie die zurücksetzen müssen setStartDelay() auf 0 in der ersten Animation, wenn Sie es in der zweiten Animation verwenden, um den Start zu verzögern. Andernfalls merkt es sich diese Verzögerung für jede nachfolgende Animation.

    – zkon

    19. August 2020 um 4:34 Uhr

Hier ist meine Lösung mit AnimatorSet, die etwas zuverlässiger zu sein scheint als AnimationSet.

// Custom animation on image
ImageView myView = (ImageView)splashDialog.findViewById(R.id.splashscreenImage);

ObjectAnimator fadeOut = ObjectAnimator.ofFloat(myView, "alpha",  1f, .3f);
fadeOut.setDuration(2000);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(myView, "alpha", .3f, 1f);
fadeIn.setDuration(2000);

final AnimatorSet mAnimationSet = new AnimatorSet();

mAnimationSet.play(fadeIn).after(fadeOut);

mAnimationSet.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        mAnimationSet.start();
    }
});
mAnimationSet.start();

Eine weitere Alternative:

Keine Notwendigkeit, 2 Animationen für zu definieren einblenden und ausblenden. ausblenden ist umgekehrt von einblenden.

Damit kannst du das machen Animation.RÜCKWÄRTS so was:

AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
alphaAnimation.setDuration(1000);
alphaAnimation.setRepeatCount(1);
alphaAnimation.setRepeatMode(Animation.REVERSE);
view.findViewById(R.id.imageview_logo).startAnimation(alphaAnimation);

dann onAnimationEnd:

alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
    @Override
        public void onAnimationStart(Animation animation) {
            //TODO: Run when animation start
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            //TODO: Run when animation end
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            //TODO: Run when animation repeat
        }
    });

Da ich an die Leistungsfähigkeit von XML (für Layouts) glaube, ist dies das Äquivalent für die akzeptierte Antwort, jedoch nur als Animationsressource:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:fillAfter="true">
    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="1000" />
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0"
        android:duration="1000"
        android:startOffset="1000"/>
</set>

Der fillAfter ist, dass die Überblendung nach Abschluss der Animation bestehen bleibt. Der interpolator Griffe Interpolation der Animationen, wie Sie sich denken können. Sie können auch andere Arten von Interpolatoren wie Linear oder Overshoot verwenden.

Stellen Sie sicher, dass Sie Ihre Animation in Ihrer Ansicht starten:

yourView.startAnimation(AnimationUtils.loadAnimation(co‌​ntext, R.anim.fade));

1643916188 309 Android Animation in Java einblenden und ausblenden
Cristhian Escobar

Hier ist, was ich zum Ein- und Ausblenden von Ansichten verwendet habe. Ich hoffe, das hilft jemandem.

private void crossFadeAnimation(final View fadeInTarget, final View fadeOutTarget, long duration){
    AnimatorSet mAnimationSet = new AnimatorSet();
    ObjectAnimator fadeOut = ObjectAnimator.ofFloat(fadeOutTarget, View.ALPHA,  1f, 0f);
    fadeOut.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            fadeOutTarget.setVisibility(View.GONE);
        }

        @Override
        public void onAnimationCancel(Animator animation) {
        }

        @Override
        public void onAnimationRepeat(Animator animation) {
        }
    });
    fadeOut.setInterpolator(new LinearInterpolator());

    ObjectAnimator fadeIn = ObjectAnimator.ofFloat(fadeInTarget, View.ALPHA, 0f, 1f);
    fadeIn.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
            fadeInTarget.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animator animation) {}

        @Override
        public void onAnimationCancel(Animator animation) {}

        @Override
        public void onAnimationRepeat(Animator animation) {}
    });
    fadeIn.setInterpolator(new LinearInterpolator());
    mAnimationSet.setDuration(duration);
    mAnimationSet.playTogether(fadeOut, fadeIn);
    mAnimationSet.start();
}

  • Irgendwie ist dies die einzige Antwort, die das Einstellen der Sichtbarkeit beinhaltet, nett

    – Lukas

    15. März 19 um 18:07 Uhr

.

759190cookie-checkAndroid-Animation in Java einblenden und ausblenden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy