2013-06-07 18 views
7

Phương thức requestLayout() có phải là công cụ thích hợp để tạo bố cục hoạt ảnh trong Android không?Yêu cầuLayout() của Android có dành cho hoạt ảnh bố cục không?

Chúng tôi đã làm việc một số năm với Adobe/Apache Flex và biết hai phương pháp invalidateProperties()commitProperties(). Có vẻ như requestLayout()layout() của Android phục vụ một mục đích tương tự. Nhưng docs đề cập đến có một chi phí.

public class Paginator extends ViewGroup { 
    private float animatedCurrentPage = 1; 
    private final ObjectAnimator objectAnimator; 

    public Paginator(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     objectAnimator = ObjectAnimator.ofFloat(this, "animatedCurrentPage", 0f); 
    } 

    public void jumpToPage(int page) { 
     objectAnimator.cancel(); 
     objectAnimator.setFloatValues(animatedCurrentPage, page); 
     objectAnimator.start(); 
    } 

    public void setAnimatedCurrentPage(float animatedCurrentPage) { 
     this.animatedCurrentPage = animatedCurrentPage; 
     requestLayout(); // <== queue an update of the layout 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     // measure children here 
    } 

    @Override 
    protected void onLayout(boolean changed, final int l, final int t, final int r, final int b) { 
     // layout children here 
    } 
} 
+0

Bạn đã xem http://developer.android.com/reference/android/widget/ViewFlipper.html hoặc http://developer.android.com/reference/android/support/v4/view/ViewPager. html chứ không phải là của riêng bạn? – FunkTheMonk

Trả lời

0

Tôi nghĩ rằng "vô hiệu()" nên bằng cách gọi thay vì link

Vẽ được xử lý bằng cách đi bộ cây và render từng xem mà cắt khu vực không hợp lệ. Bởi vì cây được di chuyển theo thứ tự, điều này có nghĩa là cha mẹ sẽ vẽ trước (tức là, phía sau) của chúng trẻ em, với anh chị em được vẽ theo thứ tự chúng xuất hiện trong cây. Nếu bạn đặt nền có thể vẽ cho Chế độ xem, khi đó Chế độ xem sẽ vẽ nó cho bạn trước khi gọi lại phương thức onDraw() của nó.

Lưu ý rằng khung sẽ không vẽ các chế độ xem không nằm trong vùng không hợp lệ.

Để bắt buộc vẽ, hãy gọi invalidate().

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