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

标签 android android-edittext textview

我正在通过扩展 View 从头开始​​制作我自己的蒙古语垂直脚本 TextView(和 EditText)。我试图了解闪烁光标是如何在 Android TextView source code 中实现的.它似乎由 Editor classmEditor 实例处理。 .在那个类中,我找到了一个 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)、LayoutEditor 的关系可绘制
  • 每次光标闪烁时,是重绘所有文本还是仅重绘光标区域?

注意:

接受的答案回答了我提出的问题。但是,如果有人可以添加更规范的答案来更详细地解释事情,我很乐意接受不同的答案。

最佳答案

  1. EditText 只是可编辑的 TextViewLayout 用于测量、计算、文本的布局位置和方式。 Drawable 只是用来保持光标的外观,稍后在 Canvas 上绘制。
  2. 只有游标Pathinvalidated .

Blinking 基本上是递归的 RunnableHandler 每 500 毫秒(猜测)以开关方式执行一次,并在 EditText 时重新安排> 有重点。这也可以通过循环 int 的 ValueAnimator 来实现,其中光标可绘制的 alpha 将在 0 到 255 之间切换。

关于android - Android EditText(TextView)如何绘制闪烁的光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43152866/

相关文章:

Android EditText插入

java - 让提交按钮适用于 recyclerview 适配器和主要 Activity 中的 edittext

Android inputType ="textEmailAddress"改变高度

java - Android studio,如何在线性布局(水平)中对齐多个 TextView 和编辑文本

android - 如何在fragment中实现onBackPressed并到达HomeFragment?

android - Google Drive API 迁移到 REST API

java - 如何创建高斯核并将其用作 opencv 中的过滤器

android studio 平台工具缺少 adb.exe

android - TextView 尺寸 - 手机和平板电脑

android - TextView 被 ImageView 推离屏幕