2012-11-01 20 views
8

Używam NineOldAndroids 2.4.0 do animowania obiektów głównie do przemieszczania i transformacji sterowania. Na Androidzie 4.0 i nowszych wersjach wszystko działa dobrze, ale w poprzednich wersjach (2.1, 2.3) po tym, jak elementy animacji nie będą koncentrować się i nie będą klikać. Kod Próbka:NineOldAndroidy, brak widoku po rotacji lub ruchu

View v = findViewById(R.id.button1); 
v.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     Toast.makeText(MainActivity.this, "Click!", Toast.LENGTH_SHORT).show(); 
    } 
}); 
ObjectAnimator moveDown = ObjectAnimator.ofFloat(v, "translationY", 100f); 
moveDown.setDuration(5000); 
moveDown.start(); 

jest to błąd w bibliotece czy coś robię źle? Jeśli ta biblioteka nie obsługuje wszystkich funkcji "API animacji Honeycomb", to w moim projekcie będzie ona bezużyteczna.

Cytat na blogu programistów Androida z "Animation in Honeycomb": Ponieważ system faktycznie zmienia właściwości obiektów docelowych, same obiekty są zmieniane, a nie tylko ich wygląd. Tak więc ten przycisk, który przesuwasz, jest właściwie przenoszony, a nie tylko narysowany w innym miejscu. Możesz nawet kliknąć w jego animowanej lokalizacji. Śmiało i kliknij to; Wyzywam cię.

+0

Fragment masz działa dobrze dla mnie NineOldAndroid na 2,3. Upewnij się, że zaimportowałeś plik com.nineoldandroids.animation.ObjectAnimator, a nie android.animation.ObjectAnimator. –

+1

Tak, zaimportowałem com.nineoldandroids.animation.ObjectAnimator. Czy jesteś pewien, że możesz nacisnąć przycisk po ruchu? Jak już wspomniałem wcześniej, to nie działa dla <3.0, przetestowałem to na emulatorze: 2.1.2.2, 2.3.3 i na prawdziwym urządzeniu (2.3.7) – avesha

+0

Mam ten sam problem. Czy próbowałeś użyć translateYBy() lub x()? – Mario

Odpowiedz

7

teraz znalazłem odpowiedź: How to do interactive animation (translation) with Android

mówi, że nineoldandroids dostał takie same ograniczenia jak natywnego SDK.

więc moje rozwiązanie:

myAnim.setListener(new AnimatorListenerAdapter() { 
    @Override 
    public void onAnimationEnd (Animator nullPointer) { 
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) child.getLayoutParams(); 
    params.bottomMargin += toYDelta; 
    params.leftMargin += toXDelta; 
    child.setLayoutParams(params); 
    } 
}); 
+3

Tak, to jest ograniczenie platformy. Musisz fizycznie przesunąć widok, gdy animacja kończy się na pre-Honeycomb. –

+2

Należy zauważyć, że zmiana marginesów widoku w celu zmiany położenia widoku działa dobrze, jeśli widok jest przenoszony ** w obrębie ** jego obiektu nadrzędnego, ale jeśli konieczne jest przesunięcie widoku, aby część z niego przesunęła się poza ramkę ograniczającą rodzica, możesz napotkać problemy z powiększaniem widoku. –

Powiązane problemy