2014-08-29 24 views
6

Tôi có một số ImageView nằm trong một trang của ViewPager và giả sử tôi muốn tạo hiệu ứng động để phóng to + bay ở đâu đó ngoài màn hình, trong khi chế độ xem gốc vẫn xuất hiện trong máy nhắn tin, bị ảnh hưởng.Cách tạo hoạt ảnh sao chép, phiên bản trùng lặp của Android hiện tại Xem

Cách tốt nhất để tạo loại hoạt ảnh này trên Android 4.0.3+ là gì? Tôi muốn sử dụng khung hoạt ảnh mới, không phải khung công tác cũ. Một cách tôi đã tìm được là sử dụng hoạt động của DecorView: tạo bản sao của ImageView ở đó và thực hiện hoạt ảnh, nhưng tôi cảm thấy như thế này hơi khó hiểu - kiểu xem trang trí trông giống một tính năng ẩn và chi tiết triển khai .

Có cách nào tốt hơn không?

Trả lời

2

Tôi nghĩ bạn có thể sử dụng DecorView bằng cách đặt setClipChildren() thành false trên tất cả các bậc cha mẹ của ImageView. Điều này cho phép bạn tạo hiệu ứng động cho một View từ bố cục của bạn ngay cả bên ngoài bố cục của nó (và thậm chí là cả Activity). Tôi chủ yếu sử dụng một phương pháp helper để làm điều này:

public static void setClipView(View view, boolean clip) { 
    if (view != null) { 
     ViewParent parent = view.getParent(); 
     if(parent instanceof ViewGroup) { 
      ViewGroup viewGroup = (ViewGroup) view.getParent(); 
      viewGroup.setClipChildren(clip); 
      setClipView(viewGroup, clip); 
     } 
    } 
} 

Vì vậy, chỉ cần sử dụng phương pháp này trên ImageView của bạn như thế này:

LayoutHelper.setClipView(imageView, false); 

Để animate View bản thân bạn nên sử dụng các API hoạt hình mới được giới thiệu với Android 3.0 (Honeycomb - API cấp 11).

This DevBytes video cũng có phần liên quan đến điều này. Nó đề cập đến các hoạt ảnh Activity tùy chỉnh và chúng tạo một bản sao ImageView để tạo hiệu ứng chuyển tiếp từ Activity sang bước tiếp theo. Đó là cơ bản giống như những gì bạn đang cố gắng làm, chỉ trong hai khác nhau Activities.

+0

Cảm ơn, nhưng có vẻ như câu hỏi của tôi không rõ ràng. Tôi muốn một khung nhìn gốc xuất hiện không bị ảnh hưởng. I E. một lượt xem vẫn đang nằm trong máy nhắn tin, trong khi bản sao của nó đang bay ngoài màn hình. Sẽ điều chỉnh câu hỏi để đề cập đến điều này một cách rõ ràng. – dimsuz

+0

Bạn chỉ cần xây dựng lại 'View' một lần nữa, ví dụ nếu nó là một' ImageView' thêm một 'ImageView' thứ hai vào bố cục với cùng một hình ảnh, kích thước và vị trí và sau đó chỉ tạo ảnh động. Họ không phải là cách đơn giản hơn thế. –

+0

[** Video DevBytes này **] (https://www.youtube.com/watch?v=CPxkoe2MraA) có phần liên quan đến điều này, nó đề cập đến hoạt ảnh 'Hoạt động' tùy chỉnh và chúng tạo một bản sao' ImageView' thành tạo hiệu ứng chuyển tiếp từ một 'Hoạt động' sang một hoạt động tiếp theo. Đó là cơ bản giống như những gì bạn đang cố gắng làm, chỉ trong hai 'Hoạt động' khác nhau. –

Các vấn đề liên quan