Android EditText(TextView)如何绘制闪烁的光标?

我通过扩展View从头开始制作自己的蒙古语垂直脚本TextView (和EditText )。 我想了解如何在Android TextView源代码中实现闪烁的光标。 它似乎是由Editor类的mEditor实例处理的。 在那个类中,我find了一个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); } 

显然,光标本身是某种types的Drawable

所以我find了碎片,但我无法通过树木看到森林。 谁能比我更好地理解这一点,用简单的英语告诉我闪烁的光标是如何工作的?

以下是一些我不太了解的具体问题:

  • 游标与TextView (或EditText ), LayoutEditorDrawable
  • 每当光标闪烁时,所有正在重绘的文本或仅光标区域?

注意:

我接受的答案就是这样回答我的问题。 然而,如果任何人都可以添加一个更详细解释事物的规范,我会很乐意接受一个不同的答案。

Solutions Collecting From Web of "Android EditText(TextView)如何绘制闪烁的光标?"

  1. EditText只是可编辑的TextViewLayout用于测量,计算,在哪里以及如何布局文本。 Drawable只是为了保持光标的外观,稍后在Canvas上绘制。
  2. 只有游标Path 无效 。

闪烁基本上是recursionRunnable Handler执行每500ms(猜测),以开关方式,它被重新安排,而EditText有焦点。 这也可以通过循环int的ValueAnimator实现,其中光标可绘制的alpha将在0和255之间切换。

你可以在TextView类中find这个方法 :

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