2013-06-18 16 views
7

Tôi đang sử dụng một dịch vụ hiển thị một cái nhìn sử dụng WindowManager, và hình ảnh động xảy ra mỗi khi tôi thay đổi kích thước của quan điểm sử dụngLàm cách nào để tắt "Quy mô hoạt ảnh cửa sổ" trên các thiết bị Android 4.0 trở lên?

windowManagerLayoutParams.height = newHeight; 
((WindowManager) getSystemService(WINDOW_SERVICE)).updateViewLayout(mMainLayout, windowManagerLayoutParams); 

Nếu tôi vô hiệu hóa bằng tay các hình ảnh động quy mô, không có hình ảnh động xảy ra. Quy mô hoạt hình vô hiệu hóa bằng tay như sau: http://www.cultofandroid.com/11143/android-4-0-tip-how-to-find-and-disable-animations-for-a-snappier-experience/

Có cách nào để vô hiệu hóa hình ảnh động quy mô cửa sổ cho ứng dụng của tôi lập trình?

+0

Ông có thể cung cấp một đoạn video ngắn để hiển thị chính xác những gì bạn nghĩa là gì? Có các hoạt ảnh bố cục và có các hoạt ảnh động và có hàng tá hoạt ảnh khác nhau khác nhau ở đó: D – WarrenFaith

+0

Nó giống như một hình động trang trình bày. Kiểu hoạt hình không thực sự quan trọng, tôi chỉ muốn vô hiệu hóa nó. –

+0

và câu trả lời không phụ thuộc vào hoạt ảnh nhưng đối với những sự kiện, hoạt ảnh được kích hoạt. Nếu nó là để chuyển tiếp hoạt động, câu trả lời khác với hoạt ảnh bố cục thuần túy ... – WarrenFaith

Trả lời

0

Bạn đã thử Activity#overridePendingTransition(0, 0)?

Check-out the documentation:

Gọi ngay sau khi một trong những hương vị của startActivity (Ý định) hoặc kết thúc() để chỉ định một hình ảnh động chuyển tiếp rõ ràng để thực hiện tiếp theo.

+1

Vâng tôi đã làm. Nó không phải là một hoạt hình hoạt động, vì không có hoạt động nào liên quan. –

+0

Nếu bạn có một giao diện người dùng, tôi đoán là bạn nên có một hoạt động. –

+2

Đó không phải lúc nào cũng như vậy. Bạn có thể đính kèm lượt xem dưới dạng bảng/lớp phủ qua Trình quản lý cửa sổ giống như những gì anh ấy đang làm .. – clark

12

Tôi vừa gặp vấn đề tương tự khi làm việc trên lớp phủ hệ thống trong gói SystemUI và quyết định tìm hiểu xem liệu tôi có thể tìm giải pháp hay không. WindowManager.LayoutParams có một số tính năng ẩn có thể giải quyết vấn đề này. Bí quyết là sử dụng các thành viên privateFlags của WindowManager.LayoutParams như vậy:

windowManagerLayoutParams.privateFlags |= 0x00000040; 

Nếu bạn nhìn vào dòng 1019 của WindowManager.java bạn sẽ thấy rằng 0x00000040 là giá trị cho PRIVATE_FLAG_NO_MOVE_ANIMATION. Đối với tôi, điều này đã ngừng hoạt ảnh cửa sổ xuất hiện trên quan điểm của tôi khi tôi thay đổi kích thước thông qua updateViewLayout()

Tôi có lợi thế khi làm việc trên gói hệ thống để tôi có thể truy cập PrivateFlags trực tiếp trong mã của tôi nhưng bạn sẽ cần để sử dụng sự phản chiếu nếu bạn muốn truy cập trường này.

+0

Android chỉ thêm cờ này vào 4.3, do đó, hoạt ảnh vẫn xuất hiện với tôi trên các thiết bị khác. –

+0

@RonTesler Tên cờ này là gì? Xin vui lòng, thêm liên kết từ api.I android không fount cờ trong lớp này [WindowManager.LayoutParams] (http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html) – AndreyNik

+1

Lá cờ là PRIVATE_FLAG_NO_MOVE_ANIMATION, nhưng như tôi đã nói trong câu trả lời của tôi, đây không phải là một API công cộng như vậy không có liên kết cho nó khác hơn là nhìn vào mã nguồn của Chương trình quản lý cửa sổ X. – clark

4

Như @clark tuyên bố này có thể được thay đổi sử dụng phản ánh:

private void disableAnimations() { 
    try { 
     int currentFlags = (Integer) mLayoutParams.getClass().getField("privateFlags").get(mLayoutParams); 
     mLayoutParams.getClass().getField("privateFlags").set(mLayoutParams, currentFlags|0x00000040); 
    } catch (Exception e) { 
     //do nothing. Probably using other version of android 
    } 
} 
Các vấn đề liên quan