Android-Animations-Alpha

Lesezeit: 4 Minuten

Benutzer-Avatar
Wioskamala

Ich habe eine Animation:

<set xmlns:android="http://schemas.android.com/apk/res/android"  
   android:interpolator="@android:anim/linear_interpolator">  
   <alpha  
       android:fromAlpha="0.2"  
       android:toAlpha="1.0"  
       android:duration="500"/>  
</set>

und ImageView:

<ImageView
    android:id="@+id/listViewIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="https://stackoverflow.com/questions/20628973/@drawable/settings" 
    android:alpha="0.2"/>  

und Code:

final Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha);
final ImageView iv = (ImageView) findViewById(R.id.listViewIcon);
anim .setFillAfter(true);
iv.startAnimation(anim);

Also am Anfang habe ich ImageView mit Alpha 0.2 und am Ende will ich haben ImageView mit Alpha 1. Aber so funktioniert es nicht – wenn die Animation beginnt, wird mehr Alpha hinzugefügt und die Animation endet mit Alpha 0.2

Was muss ich ändern, um mein Bild aus zu animieren 0.2 bis zu 1?

Ich habe mit verschiedenen Einstellungen überprüft – ich eingestellt android:alpha="1.0", fromAlpa="1.0", toAlpha="0.2" es funktioniert wie ich erwartet hatte – von alpha 1 zu 0.2. Es sieht aus wie Alpha aus ImageView wird mit Alpha aus der Animation multipliziert …

  • Um zu verhindern, dass die Ansicht am Ende auf 0,2 Alpha zurückspringt, verwenden Sie die fillAfter Attribut: developer.android.com/reference/android/view/animation/…

    – Jave

    17. Dezember 2013 um 9:06 Uhr

  • Das ist nicht der Fall. Alpha geht nicht auf 1. Wenn ich von 1-> 0,2 animiere, funktioniert es gut und bleibt bei 0,2 (ich verwende danach Füllung). Wenn ich von 0,2 auf 1 animieren möchte, verblasst es auf fast 0 und geht auf 0,2

    – Wioskamala

    17. Dezember 2013 um 9:09 Uhr


  • hast du eingestellt fillEnabled wahr?

    – Jave

    17. Dezember 2013 um 9:34 Uhr

Benutzer-Avatar
Vaibhav Agarwal

Versuche dies

AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f);
animation1.setDuration(1000);
animation1.setStartOffset(5000);
animation1.setFillAfter(true);
iv.startAnimation(animation1);

  • Entfernen Sie Alpha von Imageview-Eigenschaften und deinstallieren Sie die App von Ihrem Gerät. reinigen, zusammenbauen und neu einbauen. weil es auf meiner Seite funktioniert

    – Vaibhav Agarwal

    17. Dezember 2013 um 8:34 Uhr

  • Ich möchte Alpha nicht entfernen – Bild sollte mit Alpha 0.2 ausgeblendet werden. Die Anwendung arbeitet an einigen Dingen und wenn sie fertig ist, möchte ich mein Bild auf Alpha 1 animieren lassen.

    – Wioskamala

    17. Dezember 2013 um 8:38 Uhr


  • Bitte überprüfen Sie, ob der bearbeitete Code auf meinem Google Nexus 4 einwandfrei funktioniert. Mein Bildansichts-Alpha ist beim Start 0,2, aber nach dem Anwenden der Animation wurde es auf 1,0 geändert und die Änderungen bleiben bestehen.

    – Vaibhav Agarwal

    17. Dezember 2013 um 9:50 Uhr

  • Ich habe es anders gemacht – anstatt Alpha im Layout oder durch setAlpha/setImageAlpha zu setzen, habe ich Animation 0.2->1 gemacht und sie aufCreate gesetzt. Wenn jetzt meine Animation ausgelöst wird, geht sie perfekt von 0,2 -> 1

    – Wioskamala

    17. Dezember 2013 um 9:56 Uhr

Kommt zwar etwas spät, aber gefunden schöne Lösung in den Android-Dokumenten.

//In transition: (alpha from 0 to 0.5)
view.setAlpha(0f);
view.setVisibility(View.VISIBLE);
view.animate()
   .alpha(0.5f)
   .setDuration(400)
   .setListener(null);

//Out transition: (alpha from 0.5 to 0)
view.setAlpha(0.5f)
view.animate()
   .alpha(0f)
   .setDuration(400)
   .setListener(new AnimatorListenerAdapter() {
           @Override
           public void onAnimationEnd(Animator animation) {
           view.setVisibility(View.GONE);
         }
    });

  • das ist was ich suche

    – Radesch

    10. Dezember 2018 um 13:14 Uhr

  • Funktioniert super, danke! Ich frage mich nur, würde .setListener(null); möglicherweise andere Zuhörer entfernen/stören, z. B. onClick/onTouch-Zuhörer?

    – Erlend KH

    11. Januar 2019 um 15:16 Uhr


Benutzer-Avatar
Aminographie

Kotlin Version

Einfach verwenden ViewPropertyAnimator so was:

iv.alpha = 0.2f
iv.animate().apply {
    interpolator = LinearInterpolator()
    duration = 500
    alpha(1f)
    startDelay = 1000
    start()
}

  • Dies ist die einzige funktionierende Lösung, wenn Sie versuchen, beginDelayedTransition mit der Alpha-Animation ImageView.animate zu mischen.

    – Codierung John

    29. November 2019 um 14:30 Uhr

  • Ja! gute Antwort! Es lebe Kotlin!

    – Oz Shabat

    12. Mai 2020 um 13:38 Uhr

Alpha auf setzen 1 vor dem Start der Animation hat bei mir funktioniert:

AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f);
animation1.setDuration(500);
iv.setAlpha(1f);
iv.startAnimation(animation1);

Zumindest bei meinen Tests gibt es kein Flackern, weil Alpha vor dem Start der Animation eingestellt wurde. Es funktioniert einfach gut.

Dies ist meine Erweiterung, dies ist ein Beispiel für das Ändern des Bildes mit FadIn und FadOut :

fun ImageView.setImageDrawableWithAnimation(@DrawableRes() resId: Int, duration: Long = 300) {    
    if (drawable != null) {
        animate()
            .alpha(0f)
            .setDuration(duration)
             .withEndAction {
                 setImageResource(resId)
                 animate()
                     .alpha(1f)
                     .setDuration(duration)
             }

    } else if (drawable == null) {
        setAlpha(0f)
        setImageResource(resId)
        animate()
            .alpha(1f)
            .setDuration(duration)
    }
}

Benutzer-Avatar
Sergej Schustikow

Hm…

Das Ding ist falsch, und möglicherweise in der ordnungsgemäßen Funktion der Animationen in der Android-API.

Tatsache ist, dass, wenn Sie in Ihrem Code einen Alpha-Wert von 0,2f festlegen, dies auf den Einstellungen in der XML-Datei für Android basiert, bedeutet dies Folgendes:

0.2f = 0.2f of 0.2f (20% from 100%) ie from 0.2f / 5 = 0.04f
1f = 0.2f

Ihre Animation funktioniert also tatsächlich von 0,04f bis 0,2f

Flagge setFillAfter(true) funktioniert sicherlich, aber Sie müssen das am Ende Ihrer Animation verstehen ImageView wird den Alpha-Wert haben 0,2 f statt eins, weil Sie in der Animation 0.2f als grenzwertig akzeptablen Wert angeben (eine Art maximaler Alphakanal).

Wenn Sie also das gewünschte Ergebnis haben möchten, tragen Sie Ihre gesamte Logik in Ihren Code ein und manipulieren Sie Animationen im Code, anstatt sie in XML zu bestimmen.

Sie sollten verstehen, dass Ihre Animationen direkt von zwei Dingen abhängen:

  • LayoutParams der animierten Ansicht
  • Animationsparameter.

Animationsparameter manipulieren Ihre LayoutParams in setFillAfter\setFillBefore Methoden.

Benutzer-Avatar
ElasticCode

Das “setStartOffset” sollte kleiner sein, sonst beginnt die Animation bei View Alpha 0.xf und wartet auf den Startoffset, bevor animiert wird 1f. Hoffe der folgende Code hilft.

AlphaAnimation animation1 = new AlphaAnimation(0.1f, 1f);

animation1.setDuration(1000);
animation1.setStartOffset(50);

animation1.setFillAfter(true);

view.setVisibility(View.VISIBLE);

view.startAnimation(animation1);

1246520cookie-checkAndroid-Animations-Alpha

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

Privacy policy