ภาพเคลื่อนไหวขนาดภาพของ Android เทียบกับจุดกึ่งกลาง


90

ฉันมี 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 อื่น แต่ฉันลองใช้เลย์เอาต์อื่นแล้วไม่มีการเปลี่ยนแปลง

คำตอบ:


77

ลืมแปลเพิ่มเติมตั้งandroid:pivotX, android:pivotYครึ่งหนึ่งของความกว้างและความสูงและมันจะขนาดจากใจกลางของภาพ


2
pivotXและpivotYควรตั้งค่าเป็นครึ่งหนึ่งviewportWidthและviewportHeightเป็นค่าที่แน่นอน
toobsco42

163

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%pในไฟล์ Java แทน XML ได้อย่างไร
Nikola K.

6
ใหม่ ScaleAnimation (1.0f, 1.2f, 1.0f, 1.2f, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
Jiang Qi

นอกจากนี้ยังมี "a" - Animation.ABSOLUTE เพื่อกำหนดเป็น px
Zon

121

คำตอบของ @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.