Ich habe eine ImageView und mache eine einfache Skalierungsanimation. Sehr Standardcode.
Meine scale_up.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="1"
android:fromYScale="1"
android:toXScale="1.2"
android:toYScale="1.2"
android:duration="175"/>
</set>
Mein Animationscode:
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 den gleichen Punkt wie die Mitte, aber den gleichen Punkt oben links. Hier ist ein Link, der erklärt, was ich meine. Das erste Bild zeigt, wie die Animation skaliert wird, und das zweite Bild zeigt, wie sie skaliert werden soll. Der Mittelpunkt sollte gleich bleiben. Ich habe versucht, die Schwerkraft auf dem Bild, auf dem Behälter, links oder rechts auszurichten, sie 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.
quelle
pivotX
undpivotY
sollte auf die HälfteviewportWidth
undviewportHeight
genau eingestellt werden.50%
ist das Zentrum der animierten Ansicht.50%p
ist das Zentrum des Elternteilsquelle
50%p
ich Java-Dateien anstelle von XML?Die Antwort von @stevanveltema und @JiangQi ist perfekt, aber wenn Sie mit Code skalieren möchten, können Sie meine Antwort verwenden.
quelle
Sie können die Übersetzungsanimation in Ihrem Set verwenden, um dies auszugleichen. Sie müssen wahrscheinlich die toXDelta- und toYDelta-Werte anpassen, um sie richtig zu machen, damit das Bild zentriert bleibt.
quelle