2013-06-07 11 views
7

Czy metoda requestLayout() jest odpowiednim narzędziem do tworzenia animowanego układu w systemie Android?Czy Android requestLayout() jest odpowiedni do animacji układu?

Pracowaliśmy kilka lat z Adobe/Apache Flex i znamy dwie metody: invalidateProperties() i commitProperties(). Wygląda na to, że Androidowi requestLayout() i layout() służy podobny cel. Ale docs wspomnieć, że istnieje narzut.

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

Czy bierzesz pod uwagę http://developer.android.com/reference/android/widget/ViewFlipper.html lub http://developer.android.com/reference/android/support/v4/view/ViewPager. html zamiast toczyć własne? – FunkTheMonk

Odpowiedz

0

myślę "invalidate()" należy przez wywołanie zamiast link

rysunek jest obsługiwane przez chodzenie na drzewo i zobaczyć, że każde świadczenie przecina nieprawidłowy region. Ponieważ drzewo jest przemieszczane w kolejności, oznacza to, że rodzice będą rysować przed (tj. Za) swoimi dziećmi, z rodzeństwem narysowanym w kolejności, w jakiej pojawiają się w drzewie. Jeśli ustawisz tło do pobrania dla widoku, to Widok narysuje dla ciebie przed wywołaniem z powrotem do jego metody onDraw().

Należy zauważyć, że struktura nie wyświetli widoków, które nie znajdują się w nieprawidłowym regionie.

Aby wymusić widok do narysowania, wywołaj funkcję unieważnij().

Powiązane problemy