2011-09-07 44 views
6

Tôi đang sử dụng ViewAnimator (lớp cha của ViewFlipper) để tạo một số loại sách tương tác. Các hệ thống phân cấp là gần như thế này:Cách cải thiện hiệu suất của ViewFlipper/ViewAnimator

<ViewAnimator> 
    <include layout="@layout/p0" /> 
    <include layout="@layout/p1" /> 
    <include layout="@layout/p2" /> 
    ... 
</ViewAnimator> 

Vì vậy, các trang của cuốn sách là bên trong ViewAnimator. Mỗi trang có FrameLayout với nhiều lớp hoạt ảnh như ImageViews, TextViews, Buttons ... hóa ra là quá nhiều. Hiển thị trang mới của sách qua viewAnimator.showNext() có thể mất vài giây. Tất cả thời gian đó được chi tiêu trong ImageView.onDraw() -Traceview.

-Có bất kỳ bố cục nào thay thế cho ViewAnimator (ViewPager, các triển khai khác của ViewGroup ...) có cải thiện gì không?

-Có cách nào để tải trước lượt xem một ViewFlipper/ViewAnimator/khác sẽ hiển thị tiếp theo không? (để trang tiếp theo của sách luôn sẵn sàng và vui vẻ trong bộ nhớ)

-Bạn có nên sử dụng Canvas hoặc GLSurfaceView không? (không thể sử dụng khung hoạt ảnh)

Tôi bị kẹt ... bạn có thể trợ giúp không?

+0

Tôi đang cố gắng sử dụng ViewFlipper để bắt chước hành vi của Kiểm soát toàn cảnh trong Windows Phone và có vấn đề tương tự (lật chế độ xem chậm). Làm thế nào để cải thiện ViewFlipper xem chuyển đổi? – anonim

Trả lời

3

Tôi không thể trả lời tất cả các câu hỏi của bạn, nhưng tôi sẽ cung cấp cho bạn những gì tôi biết vì nó tốt hơn là thiếu các câu trả lời khác. : P

Chế độ xemPagers tải chế độ xem ở hai bên theo mặc định. Điều này làm tăng tốc độ chuyển đổi nhưng có thể làm chậm chế độ xem hiện đang mở. Số lượt xem được tải trước trên một người xem có thể được đặt bằng một trong các phương thức của nó.

Nếu bạn không muốn một ViewPager, bạn có thể thử thực sự tạo ra các khung nhìn mà bạn muốn tự tải trước và chỉ cần đặt chúng thành ẩn.

Tôi không có kinh nghiệm với canvas hoặc GL bên cạnh lớp phủ bản đồ, nhưng tôi mong rằng chúng có thể nhanh hơn/đáp ứng/hiệu quả hơn nếu được triển khai đúng vì bạn sẽ không có bất kỳ chức năng không cần thiết nào. Có thể là lộn xộn, tùy thuộc vào nguồn nội dung của bạn.

KHUYẾN NGHỊ: Hãy thử ViewPager, nó được tạo cho các triển khai giống như của bạn. Nếu bạn không hài lòng với nó, cuộn lên tay áo của bạn và kiểm tra vào thứ vải.

4

Để cải thiện hiệu suất của ViewFlipper, bạn có thể đặt

android: measureAllChildren = "false"

trong xml. Điều này thường được đặt thành false cho FrameLayout, nhưng ViewAnimator cho phép nó theo mặc định vì một lý do nào đó.

Đặt nó thành sai giải quyết được sự cố lag rất lạ đối với tôi.

+0

... rất đúng. Cảm ơn bạn đã mở mắt –

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