In meinem Android-Projekt habe ich eine Button
, die nach dem Klicken "animiert" werden soll (und versteckt bleiben). Der Effekt wird als ein in anim
Ressourcen definierter AnimationsSet implementiert, den ich unter Verwendung von AnimationUtils
lade. Um die Animation im letzten Frame einzufrieren, verwende ich setFillAfter(true)
.Android-Animation mit fillAfter auf True zurückgesetzt, nachdem irgendwo klicken
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v != button) return;
this.runOnUiThread(new Runnable() {
@Override
public void run() {
Animation animation = AnimationUtils.loadAnimation(button.getContext(), R.anim.out_to_back);
animation.setFillAfter(true);
button.startAnimation(animation);
}
});
}
Die Animation Ressource selbst ist wie folgt definiert: geklickt
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:fillAfter="true"
android:duration="400">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0" />
<scale
android:fromXScale="1"
android:toXScale="0"
android:fromYScale="1"
android:toYScale="0"
android:pivotX="50%"
android:pivotY="50%" />
</set>
Nachdem der Knopf wie erwartet belebt. Das Problem ist jedoch, dass die Animation zurückgesetzt wird, wenn ich irgendwo anders klicke. Eine einfache Demo:
Ist das ein Bug, oder bin ich etwas wirklich offensichtlich fehlt? Danke für irgendwelche Ideen!
Zusätzliche Informationen
- es nicht, ob ich
fillAfter
im Code festgelegt ist egal, in der XML-Ressource oder beid - , wenn es in XML-Einstellung, es ist nicht, ob ich es egal anwenden auf das
<set>
Element oder auf beiden der einzelnen „Komponenten“<alpha>
und<scale>
- die Vorschau auf einem Emulator ausgeführt API 16
- geschieht dies nicht auf API 22 012 eingefangen wurde,
PS: Ich bin mir bewusst, ich bin besser Animator
verwenden, nicht die Animation
APIs (es sei denn, ich Pre-Honeycomb Ziel müssen, was ich nicht tun) Ich bin wahrscheinlich werde Schalter auf Animator
sowieso und Überprüfen Sie, ob dieses Verhalten weiterhin besteht. Aber ich bin gespannt, was hier überhaupt vor sich geht!
kommt Danke für die Antwort! Ich habe vergessen zu erwähnen, dass fillEnabled nicht geholfen hat; Ich habe es vor nicht allzu langer Zeit gelesen: http://graphics-geek.blogspot.cz/2011/08/mysterious-behavior-of-fillbefore.html –
Auch die Sichtbarkeit von GONE zu setzen war meine "Workaround" Lösung für ein paar Tage jetzt. Ich könnte mich daran gewöhnen, aber eine andere Sache, die ich nicht erwähnte, ist, dass ich mich in Xamarin/C# entwickle. Ich habe es nur in Java in einem separaten Android Studio-Projekt neu erstellt, um das Problem zu isolieren und es in eine Sprache einzufügen, die in Android gebräuchlicher ist.Und die Sache ist, es gibt keine solche "Inline-Interface-Implementierungen" in C#; meine gesamte Aktivität müsste von IAnimationListener übernommen werden, und diese bestimmte Aktivität ist schon ein Monster ... –
Wie auch immer, deine Antwort enthält einige hilfreiche Tipps, daher der Upvote :) –