Animation a = AnimationUtils.loadAnimation(this, R.anim.scale_up);
((ImageView) findViewById(R.id.circle_image)).startAnimation(a);
Das Problem:
Wenn das Bild skaliert wird, wird es nicht von der Mitte aus skaliert, sondern von der oberen linken Ecke. Mit anderen Worten, die skalierte Version des Bildes hat nicht denselben Punkt wie die Mitte, aber sie hat denselben oberen linken Punkt. Hier ist ein Bild, das erklärt, was ich meine:
Das erste Bild zeigt, wie die Animation skaliert wird, und das zweite Bild, wie ich sie skalieren möchte. Der Mittelpunkt sollte gleich bleiben. Ich habe versucht, die Schwerkraft auf dem Bild einzurichten, auf dem Container, links oder rechts auszurichten, es skaliert immer gleich.
Ich verwende RelativeLayout für den Hauptbildschirm und ImageView befindet sich in einem anderen RelativeLayout, aber ich habe andere Layouts ausprobiert, keine Änderung.
es sollte ohne p sein, wenn es relativ zur Komponentenbreite oder -höhe ist, auf die Sie die Animation anwenden. p bezieht sich auf das übergeordnete Element der Komponente, auf die Sie die Animation anwenden.
– Alan Tief
3. Januar 2015 um 15:52 Uhr
Wie benutzt man 50%p in Java-Dateien statt in XML?
– Nikola K.
13. Juli 2015 um 17:51 Uhr
new ScaleAnimation(1.0f,1.2f,1.0f,1.2f,Animation.RELATIVE_TO_PARENT,0.5f, Animation.RELATIVE_TO_PARENT,0.5f);
– Jiang Qi
14. Juli 2015 um 1:31 Uhr
Es gibt auch “a” – Animation.ABSOLUTE in px zu setzen.
– Zon
10. Juli 2018 um 12:23 Uhr
Die Antwort von @stevanveltema und @JiangQi ist perfekt, aber wenn Sie mithilfe von Code skalieren möchten, können Sie meine Antwort verwenden.
// first 0f, 1f mean scaling from X-axis to X-axis, meaning scaling from 0-100%
// first 0f, 1f mean scaling from Y-axis to Y-axis, meaning scaling from 0-100%
// The two 0.5f mean animation will start from 50% of X-axis & 50% of Y-axis, i.e. from center
ScaleAnimation fade_in = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
fade_in.setDuration(1000); // animation duration in milliseconds
fade_in.setFillAfter(true); // If fillAfter is true, the transformation that this animation performed will persist when it is finished.
view.startAnimation(fade_in);
@T.Todua Welche Fehler? Bitte stellen Sie eine neue Frage und verlinken Sie zurück zu dieser Antwort.
– Rohan Kandwal
12. Januar 2017 um 10:36 Uhr
Was ist, wenn ich unendliche Wiederholungen für die Animation wie “` android:repeatCount=”infinite” android:repeatMode=”reverse” “` möchte
– Ali Tamoor
8. Februar 2021 um 11:19 Uhr
Stefan Veltema
Vergiss die zusätzliche Übersetzung, set android:pivotX, android:pivotY auf die halbe Breite und Höhe und wird von der Mitte des Bildes aus skaliert.
pivotX und pivotY sollte auf die Hälfte eingestellt werden viewportWidth und viewportHeight um genau zu sein.
– Etienne Lawlor
20. September 2018 um 7:58 Uhr
Sie können die Übersetzungsanimation in Ihrem Set verwenden, um dies auszugleichen. Sie müssen wahrscheinlich die toXDelta- und toYDelta-Werte optimieren, um es richtig zu machen, damit das Bild zentriert bleibt.