Nella mia attività principale, ho un viewflipper con tre viste figlio. Dopo che l'app è stata avviata, quando eseguo il primo scorrimento da destra a sinistra, la vista cambia, ma non ha l'animazione della diapositiva. Dopo il primo scorrimento, l'animazione funziona come previsto durante lo scorrimento in entrambe le direzioni. Sto seguendo il tutorial this. Il codice che uso è:L'animazione di ViewFlipper non funziona sul primo scorrimento
public boolean onTouchEvent(MotionEvent touchevent)
{
switch (touchevent.getAction())
{
// when user first touches the screen
case MotionEvent.ACTION_DOWN:
{
lastX = touchevent.getX();
break;
}
case MotionEvent.ACTION_UP:
{
float currentX = touchevent.getX();
// left to right swipe
if (lastX < currentX)
{
if (mViewFlipper.getDisplayedChild() == 0)
break;
mViewFlipper.setInAnimation(this, R.anim.in_from_left);
mViewFlipper.setOutAnimation(this, R.anim.out_to_right);
mViewFlipper.showPrevious();
}
// right to left swipe
if (lastX > currentX)
{
if (mViewFlipper.getDisplayedChild() == mViewFlipper.getChildCount() - 1)
break;
mViewFlipper.setInAnimation(this, R.anim.in_from_right);
mViewFlipper.setOutAnimation(this, R.anim.out_to_left);
mViewFlipper.showNext();
}
break;
}
}
return false;
}
Quando il debug del codice, non vedo alcuna differenza tra quando l'animazione è in funzione e quando non lo è. Inoltre, vedo questo comportamento su un dispositivo reale e sull'emulatore. Cosa mi sono perso? Posso pubblicare i file xml dell'animazione e la vista xml, se sono necessari.
EDIT:
L'unico modo sono in grado di farlo funzionare come ci si aspetta è quello di impostare la seguente nel metodo onCreate:
mViewFlipper.setInAnimation(this, R.anim.in_from_right);
mViewFlipper.setOutAnimation(this, R.anim.out_to_left);
mViewFlipper.setFlipInterval(10000);
mViewFlipper.startFlipping();
Ho poi chiamo stopFlipping() sul primo colpo. La cosa interessante per me è che l'animazione funziona al primo colpo con queste modifiche, anche se il primo auto-flip non si è verificato. Tuttavia, se imposto semplicemente l'animazione nel metodo onCreate senza chiamare il metodo startFlipping(), non ha ancora l'animazione sul primo scorrimento. Qualcuno può offrire una spiegazione del perché questo comportamento si verifica?
Solo per verificare, guardando il [codice sorgente] (http://bit.ly/1dMu0dc) della classe ViewFlipper, quando si chiama ViewFlipper.showNext(), viene chiamato il metodo ViewAnimator.showOnly (int position) . Questa è la convalida eseguita all'interno di questo metodo: final boolean animate = (! MFirstTime || mAnimateFirstTime); showOnly (childIndex, animato) ;. Quindi, quello che potrebbe succedere è che l'animazione è semplicemente ignorata sul primo capovolgimento. Non sono al 100% su questo, ma puoi verificarlo aggiungendo mViewFlipper.setAnimateFirstView (true) nel onCreate (invece delle righe che hai nella modifica) – mmark
Farò un tentativo quando ne avrò la possibilità. –
@mmark Che ha funzionato. Pubblicalo come risposta e lo accetterò. Grazie! –