Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo hace un Android EditText (TextView) dibujar el cursor parpadeante?

Estoy haciendo mi propio script vertical de Mongolia TextView (y EditText ) desde cero extendiendo View . Estoy tratando de entender cómo el cursor parpadeante se implementa en el código fuente de Android TextView . Parece ser manejado por una instancia mEditor de la clase Editor . En esa clase encontré un método drawCursor :

 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); } 

Al parecer, el cursor en sí es un Drawable de algún tipo.

  • Android Service nunca parece iniciar - onStartCommand () no se llama
  • La importación automática no funciona para las clases de Android en el estudio de Android
  • Cómo llamar a la función nativa de Iphone / Android desde Javascript?
  • Android no puede encontrar mi método onClick
  • Fuera de línea Android Dev Guide
  • SQLite Base de datos "contexto" pasó a adaptador
  • Así que estoy encontrando pedazos, pero no puedo ver el bosque a través de los árboles. ¿Podría alguien que entiende esto mejor que yo me diga en inglés claro cómo funciona el cursor parpadeante?

    Aquí hay algunos puntos específicos que realmente no entiendo:

    • La relación del cursor con TextView (o EditText ), Layout , Editor y Drawable .
    • Cada vez que el cursor parpadea, ¿todo el texto está siendo redibujado o sólo la región del cursor?

    Nota:

    La respuesta aceptada responde a mi pregunta como yo le pregunté. Sin embargo, estaría encantado de aceptar una respuesta diferente si alguien puede agregar una más canónica que explica las cosas con más detalle.

  • Android requestFocusFromTouch muestra menú con el primer elemento resaltado
  • Desenfoque o fondo oscuro cuando Android PopupWindow está activo
  • ¿Cuál es el propósito de las anotaciones de @SmallTest, @MediumTest y @LargeTest en Android?
  • ¿Cómo leer / enviar datos con el dispositivo Android 3.5mm jack auriculares?
  • Android: Cómo mantener la relación de aspecto en animación
  • Antecedentes El servicio se mata en android
  • 2 Solutions collect form web for “¿Cómo hace un Android EditText (TextView) dibujar el cursor parpadeante?”

    1. EditText es sólo editable TextView , Layout se utiliza para las medidas, cálculo, dónde y cómo se presentará el texto. Drawable es sólo para mantener la mirada del cursor, más tarde se dibuja en el Canvas .
    2. Sólo se ha invalidado la Path cursor.

    Parpadeo básicamente es recursivo Runnable que un Handler ejecuta cada 500ms (adivinar), de manera on-off, y se reprograma mientras EditText tiene el foco. Esto también se puede lograr mediante el bucle de ValueAnimator de int, donde el cursor dibujable alfa se alternará entre 0 y 255.

    Puede encontrar este método en la clase TextView :

     public void setCursorVisible(boolean visible) { if (visible && mEditor == null) return; // visible is the default value with no edit data createEditorIfNeeded(); if (mEditor.mCursorVisible != visible) { mEditor.mCursorVisible = visible; invalidate(); mEditor.makeBlink(); // InsertionPointCursorController depends on mCursorVisible mEditor.prepareCursorControllers(); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.