我正在通过扩展View 从头开始制作我自己的蒙古文垂直脚本TextView (和EditText )。我试图了解闪烁光标是如何在 Android TextView source code 中实现的。 .它似乎由 Editor class 的 mEditor 实例处理。 .在那个类中,我找到了一个 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);
}
显然,光标本身是 Drawable 某种类型的。
所以我正在寻找 fragment ,但我无法透过树木看到森林。谁能比我更了解这一点,能用简单的英语告诉我闪烁光标的工作原理吗?
以下是一些我不太明白的具体点:
- 光标与
TextView (或EditText )、Layout 、Editor 和的关系可绘制 .
- 每次光标闪烁时,是重绘所有文本还是仅重绘光标区域?
注意:
接受的答案回答了我提出的问题。但是,如果有人可以添加更规范的答案来更详细地解释事情,我会很乐意接受不同的答案。
Best Answer-推荐答案 strong>
EditText 只是可编辑的TextView ,Layout 用于测量、计算、文本的布局位置和方式。 Drawable 只是为了保持光标的外观,稍后在 Canvas 上绘制。
- 只有光标
Path 是invalidated .
闪烁基本上是递归的 Runnable ,Handler 每 500 毫秒(猜测)执行一次,以开关方式,并在 EditText 时重新调度> 有焦点。这也可以通过循环 int 的 ValueAnimator 来实现,其中光标可绘制 alpha 将在 0 和 255 之间切换。
关于android - Android EditText (TextView) 如何绘制闪烁的光标?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/43152866/
|