Auf meiner Haupttätigkeit habe ich einen Viewflipper mit drei Kind Ansichten. Nach dem ersten Start der App, wenn ich den ersten Streichen von rechts nach links mache, ändert sich die Ansicht, aber es gibt keine Folienanimation. Nach dem ersten Streichen funktioniert die Animation wie erwartet beim Streichen in beide Richtungen. Ich folge this Tutorial. Der Code, den ich verwenden ist:Viewflipper Animation funktioniert nicht beim ersten Streichen
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;
}
Wenn ich den Code debuggen, ich sehe keine Unterschiede zwischen, wenn die Animation funktioniert, und wenn es nicht ist. Außerdem sehe ich dieses Verhalten auf einem tatsächlichen Gerät und dem Emulator. Was habe ich verpasst? Ich kann die XML-Animationsdateien und die View-XML-Datei posten, wenn sie benötigt werden.
EDIT:
Der einzige Weg, ich bin in der Lage dazu wie die folgend in dem onCreate Verfahren einzustellen erwartete an der Arbeit ist:
mViewFlipper.setInAnimation(this, R.anim.in_from_right);
mViewFlipper.setOutAnimation(this, R.anim.out_to_left);
mViewFlipper.setFlipInterval(10000);
mViewFlipper.startFlipping();
ich dann stopFlipping nennen() auf dem zuerst wischen. Das Interessante an mir ist, dass die Animation beim ersten Streichen mit diesen Änderungen funktioniert, selbst wenn die erste automatische Spiegelung nicht stattgefunden hat. Wenn ich die Animation jedoch einfach in der onCreate-Methode ohne Aufruf der startFlipping() -Methode festlege, ist die Animation beim ersten Streichen immer noch nicht vorhanden. Kann jemand eine Erklärung geben, warum dieses Verhalten auftritt?
Um zu überprüfen, schaut man sich den [Quellcode] (http://bit.ly/1dMu0dc) der ViewFlipper-Klasse an, wenn Sie ViewFlipper.showNext() aufrufen, wird die ViewAnimator.showOnly (int position) -Methode aufgerufen . Dies ist die Validierung, die innerhalb dieser Methode ausgeführt wird: final boolean animate = (! MFirstTime || ManimateFirstTime); showOnly (childIndex, animate) ;. Was also passieren könnte ist, dass die Animation beim ersten Flip einfach ignoriert wird. Ich bin nicht 100% darüber, aber Sie können es überprüfen, indem Sie mViewFlipper.setAnimateFirstView (true) in onCreate hinzufügen (anstelle der Zeilen, die Sie in der Bearbeitung haben) – mmark
Ich werde es versuchen, wenn ich die Chance bekomme. –
@mmark Das hat funktioniert. Sende es als Antwort und ich akzeptiere es. Vielen Dank! –