Ich möchte den Laufschrift-Effekt in einer Textansicht verwenden, aber der Text wird nur gescrollt, wenn die Textansicht den Fokus erhält. Das ist ein Problem, denn in meinem Fall kann es nicht.
Ich benutze:
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
Gibt es eine Möglichkeit, dass die Textansicht immer einen Bildlauf durchführt? Ich habe dies in der Android Market-App gesehen, in der der App-Name in der Titelleiste gescrollt wird, auch wenn er keinen Fokus erhält, aber ich konnte nicht feststellen, dass dies in den API-Dokumenten erwähnt wird.
Antworten:
Ich habe mich dem Problem gestellt und die kürzeste Lösung, die ich gefunden habe, besteht darin, eine neue Klasse zu erstellen, die von TextView abgeleitet ist. Die Klasse sollte drei Methoden onFocusChanged , onWindowFocusChanged und isFocused überschreiben , damit die Textansicht fokussiert wird.
quelle
Ich bin heute endlich auf dieses Problem gestoßen und habe mich so aufgeregt
hierarchyviewer
die Android Market-Anwendung gestartet.Wenn sie den Titel auf dem Detailbildschirm einer App betrachten, verwenden sie ein einfaches altes
TextView
. Die Untersuchung seiner Eigenschaften ergab, dass es nicht fokussiert war, nicht fokussiert werden konnte und im Allgemeinen sehr gewöhnlich war - mit Ausnahme der Tatsache, dass es als ausgewählt markiert war .Eine Codezeile später und ich hatte es funktioniert :)
Dies ist angesichts der Aussagen des Javadoc sinnvoll :
dh Wenn Sie in einer Listenansicht über ein Element scrollen (wie in der Market-App), wird der jetzt ausgewählte Text erst dann gescrollt. Und seit diesem besonderen
TextView
nicht fokussierbar oder anklickbar ist, verliert sie niemals ihren Auswahlstatus.Leider gibt es meines Wissens keine Möglichkeit, den ausgewählten Status aus dem Layout-XML festzulegen.
Aber der Einzeiler oben funktioniert gut für mich.
quelle
TextView
(dh eine, die nicht in etwas "Auswählbares" wie a eingebettet istListView
) den ausgewählten Zustand ändern würde.TextView
Dokumentation und schau sie dir anandroid:marqueeRepeatLimit
.Fügen Sie diese Parameter einfach in Ihre Textansicht ein. Es klappt :)
quelle
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.fromXDelta stellt den Versatz der Startposition der Bewegung in der X-Achse ein.
toXDelta definiert die versetzte Endposition der Bewegung in der X-Achse.
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.
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:Und wie berechnen wir die Bildschirmbreite und die Textbreite?
Code
Nehmen Sie das Zarah-Snippet als Ausgangspunkt:
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.
quelle
textView.setSelected(true);
:) in Ihrer Situation nicht?Ich weiß nicht, ob Sie die Antwort noch brauchen, aber ich habe einen einfachen Weg gefunden, dies zu tun.
Richten Sie Ihre Animation folgendermaßen ein:
START_POS_X
,END_POS_X
,START_POS_Y
UndEND_POS_Y
sindfloat
Werte, währendTICKER_DURATION
eine istint
, erklärte ich mit meinen anderen Konstanten.Dann können Sie diese Animation jetzt auf Ihre Textansicht anwenden:
Und das ist es. :) :)
Meine Animation beginnt auf der rechten Seite außerhalb des Bildschirms (300f) und endet auf der linken Seite außerhalb des Bildschirms (-300f) mit einer Dauer von 15s (15000).
quelle
Ich habe den folgenden Code für eine ListView mit Laufschrifttextelementen geschrieben. Es basiert auf der oben beschriebenen setSelected-Lösung. Grundsätzlich erweitere ich die ArrayAdapter-Klasse und überschreibe die getView-Methode, um die TextView auszuwählen, bevor ich sie zurückgebe:
quelle
Dies ist die Antwort, die oben in meiner Google-Suche angezeigt wird, sodass ich dachte, ich könnte hier eine nützliche Antwort veröffentlichen, da ich Schwierigkeiten habe, mich ziemlich oft daran zu erinnern. Auf jeden Fall funktioniert dies für mich und erfordert XML-Attribute und A einen onFocusChangeListener.
quelle
// xml
// In Java
quelle