2015-04-06 7 views
13

Ich versuche alpha einer Android-Ansicht zu animieren (zwei Animationen, sowohl Ein- als auch Ausblenden). Alles funktioniert gut, wenn das Alpha der Ansicht standardmäßig auf 1 eingestellt ist. Allerdings möchte ich diese Ansicht transparent zunächst sein, daher habe ich gesetzt es alpha ist auf Null:Android animiert Alpha nicht, wenn es anfänglich null ist

indicatorContainer.setAlpha(0);

Nun werden die Animationen nicht. Es wird niemals sichtbar werden. Wenn ich diese Zeile auskommentiere, wird die Ansicht anfangs angezeigt (was ich nicht will), aber meine Animationen funktionieren gut, wenn ich sie aufruft. Ich denke, es ist etwas Triviales, aber anscheinend nicht. Was mache ich falsch?

UPDATE: Ich habe auch versucht, einen Punkt Floating 0f statt integer 0 nach einigen API-Änderungen Lesen der setAlpha Methode mit, dachte, dass mein Anruf kann die falsche Überlastung anrufen, aber nichts geändert.

Antwort

8

versuchen, etwas wie folgt aus:

mRelativeLayout.setAlpha(0f); 
    mRelativeLayout.animate().alpha(1f).setDuration(500).setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      super.onAnimationEnd(animation); 
      mRelativeLayout.setVisibility(View.VISIBLE); 
      //OR 
      mRelativeLayout.setAlpha(1f); 
     } 
    }); 
+0

ich war mit einfacher Animation wie folgt aus: 'Animation Animation = new AlphaAnimation (indicatorContainer.getAlpha(), 1f); animation.setFillAfter (wahr); animation.setDuration (200); indicatorContainer.startAnimation (Animation); 'gibt es keine Möglichkeit, das zu tun? –

+1

Versuchen Sie, die Sichtbarkeitseigenschaft in Layout-XML auf unsichtbar zu setzen. Und bevor Sie den Alpha-Animationsanruf starten (Ihre Ansicht) .setVisibility (View.VISIBLE); –

+0

es funktionierte so .. jede Idee, warum es nicht funktionierte? –

1

ich konfrontiert gleiche Problem, bei dem indicatorContainerImageButton ist. Im Folgenden Code behebt dieses sehr, sehr ärgerlich Problem ...

// XXX: Does not work if just 0. It calls `ImageView#setAlpha(int)` deprecated method. 
indicatorContainer.setAlpha(0.0f); 
ViewCompat.animate(indicatorContainer).alpha(1); 
0

Man kann versuchen, folgende, eine einfachere Art und Weise.

view.animate() alpha (1) .setDuration (ANIMATION_DURATION);

0

Hier ist, wie ich in der Lage war, diese zu lösen irgendwie - nicht besonders elegant, aber überschaubar:

  1. den Blick auf den ursprünglichen alpha Sie 0.0f oder sonst wollen einstellen.

  2. Wenn das Ereignis eintritt, bei dem die Ansicht mehr (oder weniger) Sichtbarkeit/Alpha haben muss - zB direkt vor dem Start einer Animation - können Sie an dieser Stelle das Alpha aktualisieren und dann die Animation in der Ansicht ausführen

ich bin immer noch etwas choppiness, wenn die Animation wiederholt, aber dieser Ansatz könnte für Szenarien arbeiten, wo die Animation nicht

wiederholt