ImageView가 있고 그것에 간단한 크기 조정 애니메이션을 수행합니다. 매우 표준적인 코드.
내 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>
내 애니메이션 코드 :
Animation a = AnimationUtils.loadAnimation(this, R.anim.scale_up);
((ImageView) findViewById(R.id.circle_image)).startAnimation(a);
문제 :
이미지의 크기가 조절되면 중앙에서 크기가 아닌 왼쪽 상단에서 크기가 조절됩니다. 즉, 이미지의 크기가 조정 된 버전은 중앙과 같은 지점이 아니지만 왼쪽 상단 지점은 동일합니다. 여기에 제가 의미하는 바를 설명하는 링크가 있습니다. 첫 번째 이미지는 애니메이션 크기 조정 방법이고 두 번째 이미지는 원하는 크기 조정 방법입니다. 중심점을 동일하게 유지해야합니다. 나는 이미지, 컨테이너, 왼쪽 또는 오른쪽 정렬에 중력을 설정하려고 시도했지만 항상 동일하게 조정됩니다. 기본 화면에 RelativeLayout을 사용하고 있으며 ImageView는 다른 RelativeLayout에 있지만 다른 레이아웃을 시도했지만 변경 사항은 없습니다.
답변
설정 추가 번역, 잊어 버려 android:pivotX
, android:pivotY
절반의 폭과 높이를 그리고 이미지의 중심에서 확장됩니다.
답변
50%
애니메이션 뷰의 중심입니다.
50%p
부모의 중심
<scale
android:fromXScale="1.0"
android:toXScale="1.2"
android:fromYScale="1.0"
android:toYScale="1.2"
android:pivotX="50%"
android:pivotY="50%"
android:duration="175"/>
답변
@stevanveltema와 @JiangQi가 제공하는 대답은 완벽하지만 코드를 사용하여 확장하려면 내 대답을 사용할 수 있습니다.
// 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);
답변
세트에서 번역 애니메이션을 사용하여이를 상쇄 할 수 있습니다. toXDelta 및 toYDelta 값을 조정하여 올바른 이미지를 유지하도록해야 할 것입니다.
<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"/>
<translate
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="-20%"
android:toYDelta="-20%"
android:duration="175"/>
</set>