Autore Topic: TextView.draw o Canvas.drawText  (Letto 405 volte)

Offline gorgo

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s2
  • Sistema operativo:
    Win7 / Linux Mint 14
TextView.draw o Canvas.drawText
« il: 23 Aprile 2013, 10:34:59 CEST »
0
Buongiorno a tutti :)

Nel mio gioco Android (API 10) basato sul pattern MVC, ho una SurfaceView con Canvas per disegnare Bitmap e Sprite e una ListView per le scelte dei dialoghi del giocatore.

Codice (XML): [Seleziona]
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >

<com.gorgo.pirates.MainGamePanel
   android:id="@+id/surface"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center" >
</com.gorgo.pirates.MainGamePanel>

<ListView
   android:id="@+id/mylist"
   android:layout_width="match_parent"
   android:layout_height="110dp"
   android:layout_gravity="center_horizontal|bottom"
   android:background="@android:color/transparent"
   android:cacheColorHint="@android:color/transparent"
   android:divider="#00000000"
   android:drawSelectorOnTop="true" >
</ListView>

Ora ho scoperto che nella mia vecchia draw delle scritte chiamavo ogni volta una new TextView  :-o che rendeva tutto molto inefficiente, ma "funzionante".

http://pastebin.com/bYmzpxCg Text.java

Però il fix non è così semplice.
Ho la necessità di mostrare su schermo parecchie stringhe (tutti i dialoghi tra i personaggi o le scritte del narratore): queste stanno sullo schermo 4 secondi, scompaiono, le setto a un nuovo valore e riappaiono a tempo debito.
Ho però scoperto che usare 3/4 TextView inizializzate e modificare runTime il campo setText mi dà nullPointerException.
Probabilmente perchè il controller è dentro a un Thread a parte (GameLoop Thread).

Ho provato anche a utilizzare un handler nell'Activity, ma senza successo (Se serve posto anche quel codice).

Quindi ora sto cercando di capire quale sia la soluzione migliore per il mio problema.
Forse utilizzare la Canvas.drawText()? Però mi dà la possibilità di scegliere un font personalizzato e c'è il modo per far sì che le scritte non "sbordino" a destra della canvas? Con la TextView sopra definita (nel pasteBin) si autoregolava e andava a capo nel caso non ci fosse abbastanza spazio ed era quello che volevo.

Che strategia mi consigliate? :(
Sono pure agli sgoccioli della scadenza del progetto e non mi serviva proprio questo problema  :'(

Grazie e sono a vostra disposizione ;)