중심점을 기준으로 한 Android 이미지 배율 애니메이션


88

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에 있지만 다른 레이아웃을 시도했지만 변경 사항은 없습니다.

답변:


76

설정 추가 번역, 잊어 버려 android:pivotX, android:pivotY절반의 폭과 높이를 그리고 이미지의 중심에서 확장됩니다.


2
pivotX그리고 pivotY절반으로 설정해야 viewportWidth하고 viewportHeight정확하게 할 수 있습니다.
toobsco42

162

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"/>

30
나를 위해 50 % (P 제외) 작업 한
agamov

5
애니메이션을 적용하는 구성 요소 너비 또는 높이에 상대적인 경우 p가 없어야합니다. p는 애니메이션을 적용하는 컴포넌트의 부모를 나타냅니다.
Alan Deep

50%pXML 대신 Java 파일에서 사용하는 방법 은 무엇입니까?
Nikola K.

6
new ScaleAnimation (1.0f, 1.2f, 1.0f, 1.2f, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
Jiang Qi

px로 설정할 "a"-Animation.ABSOLUTE도 있습니다.
Zon

120

@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);

1
@ T.Todua 무슨 오류? 새로운 질문을하고이 답변에 다시 링크하십시오.
Rohan Kandwal

7

세트에서 번역 애니메이션을 사용하여이를 상쇄 할 수 있습니다. 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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.