Eigene View. Nach onDraw() einen Text setzen ... draw()?

T

Tersus

Gast
Hallo ihr,

ich packe es irgendwie nicht so richtig. Auf der View wird eine Linie gezogen. Ich möchte nun von außen die setText aufrufen, um später einen Text in die View zu setzen. Wie muss ich setText definieren? Trotz vieler englischsprachiger Anleitungen habe ich es noch nicht gerafft.

Code:
package de.finale.kalender.daten.GBO_Elemente;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class EigeneView extends View {

  private final Paint p_linie = new Paint();
  private       Paint p_font  = new Paint();

  public EigeneView(Context context) {
    super(context);
  }

  @Override
  protected void onDraw(Canvas canvas) {

    p_linie.setColor(Color.BLACK);

    float ax = this.getPivotX();          // Start X-Koordinate
    float ay = this.getPivotY();          // Start Y-Koordinate
    float ex = ax + this.getWidth() - 1;  // End X-Koordinate
    float ey = ay + this.getHeight() - 1; // End Y-Koordinate

    // Zeichne Liniew von Nordwest bis Südost

    canvas.drawLine( ax,                  // Start X-Koordinate
                     ay,                  // Start Y-Koordinate
                     ex,                  // End X-Koordinate
                     ey,                  // End Y-Koordinate
                     p_linie);

  }

  public void setText(String Text) {

    p_font.setTextSize(30);
    p_font.setColor(Color.BLACK);

    // Neuen Canvas anlegen?
    Canvas c = new Canvas();

    c.drawText(Text, this.getPivotX(), this.getPivotY(), p_font);

    // Wie geht es weiter?

  }

}
Ich wäre dankbar, wenn mir jemand mit einem Codebeispiel helfen würde.
 
Zuletzt bearbeitet von einem Moderator:
Ho,
also ich programmier erst seit kurzem für Android aber so weit ich weiß kannst du nicht einfach ohne weiteres einen neuen Canvas erzeugen.
Schreib doch eine Methode die von onDraw aufgerufen wird und übergebe den Canvas. Also in der setText nur die Schriftgröße und -farbe etc setzen und am Anfang (beim Initialisieren) aufrufen und danach onDraw :
Code:
public class EigeneView extends View {    
    private final Paint p_linie = new Paint();   
    private       Paint p_font  = new Paint();    
    public EigeneView(Context context) {     
      super(context);
      initialize()
    } 
  private void initialize(){
     setText();
     //weitere Initialisierungen, z.B. deine Linienfabe...
  }
  @Override   protected void onDraw(Canvas canvas) { 
    p_linie.setColor(Color.BLACK);      
    float ax = this.getPivotX();          // Start X-Koordinate     
    float ay = this.getPivotY();          // Start Y-Koordinate     
    float ex = ax + this.getWidth() - 1;  // End X-Koordinate     
    float ey = ay + this.getHeight() - 1; // End Y-Koordinate      // Zeichne Liniew von Nordwest bis Südost      
    canvas.drawLine( 
        ax,                  // Start X-Koordinate                      
        ay,                  // Start Y-Koordinate                      
        ex,                  // End X-Koordinate                      
        ey,                  // End Y-Koordinate                      
        p_linie); 

    drawText(canvas)   
 }    

 public void setText() {     
    p_font.setTextSize(30);     
    p_font.setColor(Color.BLACK);    
 } 
  private void drawText(Canvas canvas){
    String txt="deine Ausgabe";  
    c.drawText(txt, this.getPivotX(), this.getPivotY(), p_font);
  }
}
sag bescheid obs geht habs nicht ausprobiert :D
Gruß
 
Zuletzt bearbeitet:
... nett von Dir, aber ich fürchte, dass Dein Wissen hier nicht ausreicht. Ist wirklich nicht böse gemeint. :sad:

Dein Beispiel ergibt überhaupt keinen Sinn, weil die setText gar nicht von außen aufgerufen wird.

Die Methode ist öffentlich, damit ich sie z.B. später von meine Activity aus aufrufen kann. Genau das ist ja Sinn und Zweck der Implementierung.

Ähnlich wie bei einer TextView.
 
aw sorry hab überlesen dass du von außen darauf zugreifen willst. :D
Da hätte ich eine Lösung, meiner meinung nach nicht schön aber selten..
Ich habe eine switch-case in die onDraw eingefügt und einen Setter. Vor jedem aufruf der onDraw kann man den Setter setzen und onDraw führt dann den switch-Teil aus der festgelegt wurde.
Also z.B. bei switch case 1 malt onDraw die Linie, bei 2 deinen Text.
Und damit du nur deine setText aufrufen musst kannst du von setText aus deinen Setter setzen.
Ich hatte das Problem auch mal nur ist mir kein bessere Lösung eingefallen.
Hoffe das hilft besser ;)
 
Hm ... abgesehen davon, dass das keine Lösung ist, hat das auch nichts mit sauberer Programmierung zu tun. :(

Hat jemand andere Vorschläge?

EDIT:

Verdammt ... invalidate() lautet die Lösung. Peinlich, weil ich mir sicher bin, die Frage schon mal gestellt zu haben.
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

FabianDev
Antworten
5
Aufrufe
561
swa00
swa00
A
Antworten
1
Aufrufe
637
swa00
swa00
F
  • Fischi84
Antworten
2
Aufrufe
1.917
Fischi84
F
Zurück
Oben Unten