2010-10-25 17 views
6

Cześć wszystkim: Piszę klasy, które dziedziczą z TextView i zastąpić swoją metodę onDraw(), ale w sposobie, mój invoke od canvas.drawText() nie Wydaje się działać, kod jak poniżej:dlaczego mój invoke z Canvas.drawText() po prostu nie działa

protected void onDraw(Canvas canvas) { 
    // super.onDraw(canvas); 
    Paint paint = new Paint(); 
    paint.setColor(android.graphics.Color.WHITE); 
    paint.setTextSize(20); 

    String text = "hello"; 
    canvas.drawText(text, 0, 0, paint); 
} 
+0

@bemace, co to robi? To powinno przywrócić cześć w lewym górnym rogu. Czy to się psuje? Czy nic nie robi? Czy oryginalne zachowanie textView przejmuje kontrolę? W jaki sposób używasz Overridden TextView w layoucie? –

+0

@Greg - Właśnie wyczyściłem formatowanie kodu, user486005 zadał pytanie –

Odpowiedz

18

Nie rysuje niczego, ponieważ współrzędne tekstu są u dołu po lewej. Ponieważ próbujesz narysować 0,0, rysuje się on nad ekranem.

Spróbuj zmienić ostatni wiersz:

canvas.drawText(text, 0, 20, paint); 
+0

@ user486005 Podczas testowania rysunku najlepiej jest spróbować narysować do znanego punktu, takiego jak 100 100, początkowo do debugowania, a następnie martwić się o umieszczenie. Uświadomiłbyś sobie, że twoim problemem był tekst czerpiący z ekranu, przyjmujący takie podejście. Tylko myśl. –

+3

Dlaczego na świecie współrzędne zaczynają się od lewego dolnego rogu? Zawsze było po lewej stronie! –

+0

Przynajmniej mogli wspomnieć o tej różnicy w dokumentacji! –

-1

wspaniałe propozycje dookoła, naprawdę wielkie chłopaki pracy. Następnym razem, byłoby miło, gdybyś zapytał gościa w komentarzu lub coś w tym stylu, czy wypróbował to, co zupełnie oczywiste, zanim umieścisz to jako odpowiedź. Czy naprawdę sądzisz, że gdy doszedł do punktu, który nie działał, po prostu trafił prosto do Stack Overflow bez eksperymentowania?

Mam alternatywną sugestię, że szaleńczo jest oparte na całym pytaniu, a nie tylko na części, na którą można odpowiedzieć bez dużej wiedzy.

Polecam wypróbowanie twojego wezwania drawText na płótnie, które nie znajduje się w podklasie TextView, ponieważ w ten sposób nie zostanie przesłonięte przez kilkaset linii kodu w TextView, które zarządzają jego stanem losowania.