2013-12-17 16 views
34

I AnimationAndroid-Animation Alpha

<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 Image

<ImageView 
    android:id="@+id/listViewIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/settings" 
    android:alpha="0.2"/> 

und Code haben:

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

So am Anfang habe ich mit Image alpha 0,2 und bei der Ende Ich möchte ImageView mit Alpha 1 haben. Aber so funktioniert es nicht - wenn die Animation startet, wird mehr Alpha hinzugefügt und Animation finis h mit alpha 0.2

Was muss ich ändern, um mein Bild von 0.2-> 1 zu animieren?

Ich habe mit verschiedenen Einstellungen überprüft - ich setze android: alpha = "1.0", vonAlpa = "1.0" bis Alpha = "0.2" es funktioniert wie ich erwartet habe - von Alpha 1 bis 0,2. Es sieht aus wie Alpha von Image von alpha aus Animation multipliziert wird ...

+0

Um zu verhindern, dass die Ansicht am Ende auf 0,2 Alpha zurückspringt, verwenden Sie das Attribut "fillAfter": http://developer.android.com/reference/android/view/animation/Animation.html#attr_android:fillAfter – Jave

+0

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 benutze Füllung nach). Wenn ich von 0,2 bis 1 animieren möchte, wird es fast zu 0 und geht zu 0,2 – wioskamala

+0

hast du 'fillEnabled' auf true gesetzt? – Jave

Antwort

64

Versuchen Sie, diese

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

Gleiches Ergebnis wie in meinem Beispiel ... – wioskamala

+0

Reove Alpha von Bildansicht Properties und Uninsatll App von Ihrem Gerät. putzen, bauen und wieder installieren. weil es meine Seite arbeitet –

+0

Ich möchte Alpha nicht entfernen - Bild sollte mit Alpha 0,2 verblasst werden. Anwendung tut einige Sachen und wenn bereit ist, will ich mein Bild zu Alpha 1 animiert haben. – wioskamala

1
<ImageView 
    android:id="@+id/listViewIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/settings"/> 

android:apha=0.2 von XML-> Image entfernen.

1

Hm ...

Die Sache ist falsch, und möglicherweise in dem ordnungsgemäßen Betrieb der Animationen in dem Android-API.

Tatsache ist, dass, wenn Sie in Ihrem Code Alpha-Wert von 0.2f gesetzt von den Einstellungen in der XML-Datei für Android basiert bedeutet, dass:

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

So Ihre Animation in der Tat funktioniert von 0,04 f 0.2f

Flagge setFillAfter(true) arbeitet sicher, aber Sie müssen ImageView, dass am Ende der Animation verstehen, den alpha-Wert 0.2f statt einen, weil Sie 0.2f als marginal angeben acc eptable Wert in der Animation (eine Art maximaler Alphakanal).

Also, wenn Sie das gewünschte Ergebnis haben wollen, tragen Sie Ihre ganze Logik zu Ihrem Code und manipulieren Animationen in Code statt in XML zu bestimmen.

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

  • LayoutParams Trick anzeigen
  • Animationsparameter.

Animationsparameter manipulieren Ihre LayoutParams in setFillAfter \ setFillBefore Methoden.

+0

Ja. Du hast recht. Wenn ich Layoutparams bei meinem Code ändere, wurde es wie ein Charme gearbeitet! –

9

Einstellung alpha 1 vor der Animation beginnt für mich gearbeitet:

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

Mindestens auf meinen Tests, kein Flimmern ist alpha wegen Einstellung vor der Animation zu starten. Es funktioniert einfach gut.

+0

Das funktionierte auch für mich (edit: mein Fehler, ich habe XML-Interferenz: Android: alpha = "0"). Ich werde damit ein bisschen herumspielen, aber ich muss es bei 0 anfangen, damit das jetzt funktioniert. Vielen Dank. –