Ich mache mein eigenes mongolisches vertikales Skript TextView
(und EditText
) von Grund auf neu, indem ich View
verlängere. Ich versuche zu verstehen, wie der blinkende Cursor in Android TextView
source code implementiert ist. Es scheint von einer mEditor
Instanz der Editor
class behandelt zu werden. In dieser Klasse fand ich eine drawCursor
Methode:Wie zeichnet ein Android EditText (TextView) den blinkenden Cursor?
private void drawCursor(Canvas canvas, int cursorOffsetVertical) {
final boolean translate = cursorOffsetVertical != 0;
if (translate) canvas.translate(0, cursorOffsetVertical);
for (int i = 0; i < mCursorCount; i++) {
mCursorDrawable[i].draw(canvas);
}
if (translate) canvas.translate(0, -cursorOffsetVertical);
}
Offenbar die Cursor selbst ist ein Drawable
irgendeine Art.
So finde ich Stücke, aber ich kann den Wald nicht durch die Bäume sehen. Könnte jemand, der das besser versteht als ich, mir in einfacher Sprache sagen, wie der blinkende Cursor funktioniert?
Hier sind einige spezifische Punkte, die ich nicht wirklich verstehen:
- Die Beziehung des Cursor auf die
TextView
(oderEditText
),Layout
,Editor
undDrawable
. - Jedes Mal, wenn der Cursor blinkt, wird der gesamte Text neu gezeichnet oder nur die Cursor-Region?
Hinweis:
Die akzeptierte Antwort beantwortet meine Frage, wie ich sie gefragt. Ich würde jedoch gerne eine andere Antwort akzeptieren, wenn jemand eine kanonischere hinzufügen könnte, die die Dinge detaillierter erklärt.
Der Trick in GitHub auf bestimmte Codezeilen zu verknüpfen eine Aufwertung wert! – Suragch