TranslateAnimation
funktioniert durch "Ziehen" der Ansicht in eine Richtung um einen bestimmten Betrag. Sie können festlegen, wo dieses "Ziehen" beginnen und wo es enden soll.
TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta);
fromXDelta stellt den Versatz der Startposition der Bewegung in der X-Achse ein.
fromXDelta = 0 //no offset.
fromXDelta = 300 //the movement starts at 300px to the right.
fromXDelta = -300 //the movement starts at 300px to the left
toXDelta definiert die versetzte Endposition der Bewegung in der X-Achse.
toXDelta = 0 //no offset.
toXDelta = 300 //the movement ends at 300px to the right.
toXDelta = -300 //the movement ends at 300px to the left.
Wenn die Breite Ihres Textes größer ist als das Modul der Differenz zwischen von XDelta und toXDelta, kann sich der Text nicht vollständig und vollständig innerhalb des Bildschirms bewegen.
Beispiel
Nehmen wir an, unsere Bildschirmgröße beträgt 320 x 240 Pixel. Wir haben eine Textansicht mit einem Text mit einer Breite von 700 Pixel und möchten eine Animation erstellen, die den Text "zieht", damit wir das Ende der Phrase sehen können.
(screen)
+---------------------------+
|<----------320px---------->|
| |
|+---------------------------<<<< X px >>>>
movement<-----|| some TextView with text that goes out...
|+---------------------------
| unconstrained size 700px |
| |
| |
+---------------------------+
+---------------------------+
| |
| |
<<<< X px >>>>---------------------------+|
movement<----- some TextView with text that goes out... ||
---------------------------+|
| |
| |
| |
+---------------------------+
Zuerst stellen wir fromXDelta = 0
so ein, dass die Bewegung keinen Startversatz hat. Jetzt müssen wir den toXDelta-Wert berechnen. Um den gewünschten Effekt zu erzielen, müssen wir den Text genau so px "ziehen", wie er sich aus dem Bildschirm erstreckt. (im Schema wird durch <<<< X px >>>> dargestellt) Da unser Text eine Breite von 700 hat und der sichtbare Bereich 320px (Bildschirmbreite) beträgt, setzen wir:
tXDelta = 700 - 320 = 380
Und wie berechnen wir die Bildschirmbreite und die Textbreite?
Code
Nehmen Sie das Zarah-Snippet als Ausgangspunkt:
/**
* @param view The Textview or any other view we wish to apply the movement
* @param margin A margin to take into the calculation (since the view
* might have any siblings in the same "row")
*
**/
public static Animation scrollingText(View view, float margin){
Context context = view.getContext(); //gets the context of the view
// measures the unconstrained size of the view
// before it is drawn in the layout
view.measure(View.MeasureSpec.UNSPECIFIED,
View.MeasureSpec.UNSPECIFIED);
// takes the unconstrained wisth of the view
float width = view.getMeasuredWidth();
// gets the screen width
float screenWidth = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();
// perfrms the calculation
float toXDelta = width - (screenWidth - margin);
// sets toXDelta to 0 if the text width is smaller that the screen size
if (toXDelta < 0) {toXDelta = 0; } else { toXDelta = 0 - toXDelta;}
// Animation parameters
Animation mAnimation = new TranslateAnimation(0, toXDelta, 0, 0);
mAnimation.setDuration(15000);
mAnimation.setRepeatMode(Animation.RESTART);
mAnimation.setRepeatCount(Animation.INFINITE);
return mAnimation;
}
Es gibt möglicherweise einfachere Möglichkeiten, dies durchzuführen, aber dies funktioniert für jede erdenkliche Ansicht und ist wiederverwendbar. Dies ist besonders nützlich, wenn Sie eine Textansicht in einer Listenansicht animieren möchten, ohne die aktivierten / onFocus-Funktionen der Textansicht zu beeinträchtigen. Es wird auch kontinuierlich gescrollt, auch wenn die Ansicht nicht fokussiert ist.