2012-07-12 19 views
10

Tôi có một danh sách tùy chỉnhXem trong đó có một tiêu đề được ghim và số lượng lượt xem "đẩy lên" có thể được đẩy lên và ẩn phía trên chế độ xem danh sách.Chế độ xem danh sách tùy chỉnh với tiêu đề được ghim, khiến Jank khi đặt đệm

Tôi có hình ảnh đính kèm để giải thích chúng. Xin lỗi vì "kiểm duyệt đen", chỉ để ẩn biểu trưng của khách hàng, v.v.

Vấn đề của tôi là nếu tôi thêm đệm vào chế độ xem Tiêu đề được ghim, tôi sẽ nhận được các mục listview nổi phía sau nó.

Chế độ xem tiêu đề được ghim, được triển khai với cùng kỹ thuật như bạn sẽ tìm thấy nếu bạn tìm kiếm PinnedHeaderListView, tức là chế độ xem tĩnh và Tiêu đề trong chế độ xem danh sách.

Tôi đã tìm thấy một cách để bật đệm, và đó là bằng cách áp dụng cùng một phần đệm làm tiêu đề được ghim vào danh sách thực tếView, nhưng chỉ khi tiêu đề tĩnh hiển thị.

Tuy nhiên, việc gọi setPadding gây ra một Jank khá rõ ràng mà tôi muốn xóa. Có ai có ý tưởng làm thế nào để loại bỏ jank này?

Tôi có một ứng dụng đơn giản với chế độ xem đơn giản và dữ liệu giả, không hiển thị jank này, vì vậy có thể số lượng jank phụ thuộc vào độ phức tạp của bố cục ô.

private void updateIfShouldShowStaticHeaderView() { 

    //unfortunately setting the padding of the listView causes JANK. 

    //any ideas? 
    int bottomOfFloatingHeader = floatingHeader.getBottom(); 
    if (bottomOfFloatingHeader < mHeaderViewHeight) { 
     staticHeaderViewIsVisible = true; 
     staticHeader.setVisibility(View.VISIBLE); 

     //need to set padding of listView to avoid having list-view items float behind my padded static header 
     setPadding(0, staticHeader.getPaddingTop(), 0, getPaddingBottom()); 
    } else { 
     staticHeaderViewIsVisible = false; 
     staticHeader.setVisibility(View.INVISIBLE); 
     //need to set padding of listView to avoid having list-view items float behind my padded static header 
     setPadding(0, 0, 0, getPaddingBottom()); 
    } 
} 

Đầu tiên đây là hình ảnh hiển thị tiêu đề đẩy lên showing the pushed-up headers

Dưới đây là một hình ảnh cho thấy cách điều được rút ra phía sau xem đệm gắn tĩnh. Điều đáng chú ý là nó hoạt động như có ý định nếu tôi điều chỉnh phần đệm của listView, nhưng tôi sẽ nhận được Jank (chậm lại), tại thời điểm nó bật/tắt chế độ xem tiêu đề tĩnh.

showing the error that is visible if I do not adjust padding

+5

+1 cho hình ảnh rất đẹp, tác phẩm nghệ thuật mát mẻ :) –

+0

plz nó nằm ngoài câu hỏi của bạn, nhưng bạn sẽ cho tôi biết làm thế nào u tổ chức listview và bố trí ứng dụng của bạn? – Angelika

Trả lời

0

Kể từ setPadding trên ListView sẽ gây ra bố trí các cuộc gọi, nó sẽ rất ineffecient, đặc biệt là trong trường hợp với các tế bào ListView phức tạp. Giải pháp là thêm đồ họa nền vào tiêu đề được ghim đại diện cho phần đệm cần thiết. Điều này có nghĩa là toàn bộ tiêu đề được ghim chắc chắn. Các yếu tố của chế độ xem danh sách sau đó sẽ được vẽ phía sau đồ họa này. Đây là giải pháp mà chúng tôi đã kết thúc.

Nó hoạt động, nhưng tốt hơn là nên cắt listView.

1

Cần thêm thông tin về câu hỏi của bạn.

Với sự hiểu biết của tôi, Jank là do lượng dữ liệu khổng lồ và có thể rút được mà bạn đang sử dụng.

Cố gắng bật tăng tốc phần cứng cho chế độ xem của bạn.

Để biết thêm về HW tăng tốc thử này http://developer.android.com/guide/topics/graphics/hardware-accel.html

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