【问题标题】:is it posible to add cursor on drawtext on canvas?是否可以在画布上的 drawtext 上添加光标?
【发布时间】:2016-11-29 14:26:27
【问题描述】:

我的代码在这里

textPaint.setStyle(Paint.Style.FILL);
textPaint.setTextAlign(Paint.Align.CENTER);
canvas.drawText(substring, textX, y, this.textPaint);

我也想在这里添加像edittext这样的光标

【问题讨论】:

  • 你为什么不使用样式EditText
  • @DimaRostopira 因为我想在点击的位置添加文本,我必须使用画布作为另一个绘图元素一起工作

标签: android canvas drawtext


【解决方案1】:

你可以这样绘制闪烁的光标:

private long lastCursorChangeState = -1;
private boolean cursorVisible = true;
private Rect textBounds = new Rect();

@Override
protected void onDraw(Canvas canvas) {  
    if(isWriting){
        if(System.currentTimeMillis() - lastCursorChangeState > 500) {
            cursorVisible = !cursorVisible;
            lastCursorChangeState = System.currentTimeMillis();
        }

        if(cursorVisible){
            paint.getTextBounds(textToDraw, 0, textToDraw.length(), textBounds);
            canvas.drawLine(textX+textBounds.right, textY-textSize, textX+textBounds.right, textY, paint);
        }

        postInvalidateDelayed(500);
    }
}

【讨论】:

    【解决方案2】:

    不,据我所知这是不可能的,因为文本是位图的一部分,并且不会被 textmarker 界面解释为文本。

    我会建议另一种解决方案:

    1. 使用这样的封装布局结构(布局只是简单化!)

      <FrameLayout>
           <Canvas />
           <TextView />
           <!-- More textviews -->
      </FrameLayout>
      
    2. 您可以通过调用函数 setXsetY 将 textview 定位在框架布局内。只要在画布之后定义了文本视图,文本视图就会始终绘制在画布之上。此外,您可以通过调用函数 setVisibility

    3. 通过代码使其可见/不可见
    4. 除此之外,您可以使用代码动态向框架布局添加更多 Textview,而不是在布局 xml 中静态定义 textview

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 2019-06-26
      • 2013-07-30
      相关资源
      最近更新 更多