2016-11-29 3 views
0

mein Code ist hierist es möglich, den Cursor auf drawtext on canvas hinzuzufügen?

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

I wie EditText Cursor hier auch hinzufügen möchten

+0

warum Sie Stil verwenden Sie keine 'EditText'? –

+0

@DimaRostopira, weil ich Text auf Position angeklickt hinzufügen möchte und ich Canvas für ein anderes Zeichenelement zusammen verwenden kann, funktioniert – hugerde

Antwort

0

Nein, soweit ich weiß, dass es nicht möglich ist, weil der Text Teil einer Bitmap und nicht interpretiert als Text durch die Textmarker-Schnittstelle.

ich eine andere Lösung vorschlagen würde:

  1. eine verkapselte Layout-Struktur wie das Verwenden (! Layout nur vereinfachter)

    <FrameLayout> 
        <Canvas /> 
        <TextView /> 
        <!-- More textviews --> 
    </FrameLayout> 
    
  2. Sie das Textview innerhalb des framelayout positionieren kann die durch den Aufruf Funktion setX oder setY. Die Textansicht wird dann immer über der Zeichenfläche gezeichnet, solange die Textansicht nach der Zeichenfläche definiert ist. Darüber hinaus können Sie es sichtbar/unsichtbar durch Code machen, indem die Funktion setVisibility Aufruf

  3. Zusätzlich zu diesem, können Sie mehr Textviews zum framelayout dynamisch hinzufügen Code anstelle der Definition des Textview statisch im Layout xml

0

Sie zeichnen können Cursor blinkt auf diese Weise:

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