2011-12-07 11 views
64

Tôi có một ImageView và tôi thực hiện một hoạt ảnh đơn giản với nó. Mã rất chuẩn.Hoạt ảnh trên quy mô hình ảnh trên Android có liên quan đến điểm trung tâm

scale_up.xml của tôi:

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

mã hoạt hình của tôi:

Animation a = AnimationUtils.loadAnimation(this, R.anim.scale_up); 
((ImageView) findViewById(R.id.circle_image)).startAnimation(a); 

Vấn đề:

Khi hình ảnh quy mô nó không quy mô từ trung tâm, nhưng từ góc trên bên trái. Nói cách khác, quy mô của hình ảnh không có cùng điểm với trung tâm, nhưng nó có cùng điểm trên cùng bên trái. Here's a link that explains what I mean. Hình ảnh đầu tiên là cách tỷ lệ hoạt ảnh và hình ảnh thứ hai là cách tôi muốn nó mở rộng. Nó nên giữ cho điểm trung tâm giống nhau. Tôi đã thử thiết lập lực hấp dẫn trên hình ảnh, trên thùng chứa, căn chỉnh trái hoặc phải, nó luôn luôn cân bằng nhau. Tôi đang sử dụng RelativeLayout cho màn hình chính và ImageView được đặt trong một RelativeLayout khác, nhưng tôi đã thử các bố cục khác, không thay đổi.

Trả lời

63

Quên bản dịch bổ sung, thiết lập android:pivotX, android:pivotY một nửa chiều rộng và chiều cao và nó sẽ mở rộng từ trung tâm của hình ảnh.

5

Bạn có thể sử dụng hoạt ảnh dịch trong bộ của mình để bù đắp. Có thể bạn sẽ cần phải tinh chỉnh các giá trị toXDelta và toYDelta để làm cho nó đúng để nó giữ hình ảnh ở giữa.

<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> 
123

50% là trung tâm của chế độ xem hoạt ảnh.

50%p là trung tâm của cha mẹ

<scale 
    android:fromXScale="1.0" 
    android:toXScale="1.2" 
    android:fromYScale="1.0" 
    android:toYScale="1.2" 
    android:pivotX="50%p" 
    android:pivotY="50%p" 
    android:duration="175"/> 

+0

50% p đã thực hiện công việc. –

+21

cho tôi 50% đã làm công việc (không có p) – agamov

+2

nó sẽ không có p nếu nó liên quan đến chiều rộng thành phần hoặc chiều cao mà u r áp dụng hình ảnh động. p dùng để chỉ cha mẹ của thành phần mà ur áp dụng hoạt ảnh. –

70

Câu trả lời được cung cấp bởi @stevanveltema và @JiangQi là hoàn hảo nhưng nếu bạn muốn mở rộng quy mô sử dụng mã, sau đó bạn có thể sử dụng câu trả lời của tôi.

// 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 Lỗi gì? Vui lòng đặt câu hỏi mới và liên kết ngược lại câu trả lời này. –

+0

Đã sửa lỗi, sự cố ở bên cạnh tôi ... cảm ơn. –