Text in Canvas scrollen lassen

Status
Nicht offen für weitere Antworten.

MiMij

Bekanntes Mitglied
Hi,

also folgendes Problem:
Ich hab alles in Canvas geschrieben und benutze keine vorgefertigten Listen etc. Daher hab ich das Problem das ich darauf achten muss, das der text am Ende der Zeile gebrochen wird und nur so viel geschrieben wird wie der Bildschirm gross ist.
Jetzt hab ich es wohl hinbekommen das mein Text scrollt bei nem normalen Text, da hab ich einfach jede Zeile in nen Vector gesteckt und lasse dann Zeile fuer Zeile das ausgeben, scroll ich dann runter, komtm die naechste Zeile.
Das Problem ist nun bei einem Vote menu. Es sind checkboxen, und der Text hinter so einer Checkbox, kann natuerlich auch laenger sein als eine Zeile. Somit kann ich hier nicht die Idee mit dem Vector benutzen. Jedenfalls nicht so wie oben. Also hab ich eine neue Klasse angelegt, die ein chooseObject enthaelt. Dieses object hat dann von jeder Vote Option die Zeilen und die lasse ich dann zeichnen. Das funktioniert auch, jedoch nur solange die naechste Zeile wenn cih runter scrolle nicht mehrere Zeilen hat.

Mal nen Beispiel:
Koennen jetzt 8 Zeilen auf den Bildschirm, und sind diese alle einzeilig ausser die erste die ist 2 zeilig. Die naechste Zeile waere 3 Zeilig, scroll ich nun runter, muesste er ja theroretisch die ersten 2 vote objecte "wegnehmen" das waeren dann die 3 zeilen die mir fehlen. Jedoch funktioniert das nicht.

Ausserdem ist das ein riesieges Chaos, und ich muss tausende von Abfragen machen, wie viel zeilen die erste, die zweite zeile uws hat und die letzte und und und...

Mir wurde gesagt das selbst J2ME Polish das nohc nicht ordentlich hinbekommen hat. Das deprimiert mich nun schon ein wenig.
kann ich nciht irgendwie das wie bei nem Bild machen, und einfach nur nen Bestimmten bereich davon zeichnen? Dann koennte ich einfach alle vote optionen zeichnen, und nur das was gerade aktuell ist, anzeigen lassen. So waere es auch moeglich das zb nur nen stueck von der naechsten zeile zu sehen ist.

Danke fuer die Hilfe.
 

The_S

Top Contributor
Warum so umständlich? Erstell dir doch ein Bild mit der Displaybreite und errechne anhand deiner componenten die benötigte größe. Darauf zeichnest du dann alles. Dieses Bild stellst du anschließend auf deinem Canvas dar und wenn gescrollt werden soll, malst du das bild einfach ein bisschen weiter oben im minus-bereich.
 

MiMij

Bekanntes Mitglied
Sorry ich denk immer zu kompliziert, und da nen Mitarbeiter hier in der Firma auch schon sagte das is schwer, war ich noch demotivierter ^^

Also du meinst, ich mache ein leeres Image. Mit der Breite vom Display und der hoehe aller vote optionen. Diese zeiche ich alle auf das grafik object von dem leeren Bild und zeichne dann immer nur den Berecih von dem Bild den ich gerade benoetige?
Das problem ist ja noch, wenn ich die Pfeiltaste nach unten druecke muss ja die naechste vote optionen makiert werden also andere textfarbe oder so, dann muesste ich jedes mal das Bild neu erstellen?!
 

The_S

Top Contributor
Naja, du kannst dir auch den Umweg über das Bild sparen und gleich direkt zeichnen. Müsstest dann die Zeichenpositionen immer weiter nach oben/unten verschieben.
 

The_S

Top Contributor
Du gibst ja an, wo du z. B. deine Strings zeichnest. Das darste jetzt nicht mehr fest eincodieren, sondern musst variablen festlegen. Und wenn gescrollt werden soll, musst du die Variablen entsprechend anpassen. Geht vorallem um die Y-Koordinate.
 

MiMij

Bekanntes Mitglied
Ich hab ja schon ne variable Hoehe in meiner chooseLine klasse

Code:
	public void drawLines (int currentTextPositionHeight, Graphics g) {
		if (chooseTyp.equalsIgnoreCase("checkBox")) {
			g.drawRect(5, currentTextPositionHeight+selected.getHeight()/4, 10, 10);
			if (isSelected()) {
				g.fillRect(5, currentTextPositionHeight+selected.getHeight()/4, 10, 10);
			}
		}
		for (int i = 0; i < lines.size(); i++) {
			g.drawString(lines.elementAt(i).toString(), 20, currentTextPositionHeight,
					Graphics.TOP | Graphics.LEFT);
			currentTextPositionHeight += selected.getHeight();
		}
	}

Das waere jetzt ein object einer vote zeile. ich sag halt der soll das object zeichnen und der zeichnet dann die linien. und die currentTextPositionHeight, wird dann in der anderen Klasse berechnet mit den anzahl der Zeilen.
 

MiMij

Bekanntes Mitglied
Das funktioniert so net ^^
Ich hab in der Hauptklasse immer geschaut wie viel Zeilen ich zeichnen kann, und dann wie viele Zeilen die naechste Vote option hat, wenn es reinpaste hab cih es gezeichnet.
Wenn jetzt zb die erste option 2 zeilen hat, und ich nen stuecken nach unten scroll muss ja noch der 2. teil der 1. option dort stehen, zb. Mir wurde ich sagt ich soll net Zeilenweise arbeiten und ich soll nen view machen und nen offset fuer jede vote option. Aber wie genau konnt der mir auch net sagen. Daher hoerte sich das mit dem image ganz gut an, aber das ist ja ziemlich uneffizient denk ich mal.
 

The_S

Top Contributor
Naja, du dürfst ja auch net sagen 1 Elment = 1 Zeile, sondern musst gucken wie viele Zeichen du in eine Zeile bekommst. Wenn die Zeile voll ist, dann überprüfen ob es dann komplett in die zweite Zeile passt, wenn das auch net passt, dann ob es mit 3 Zeilen reicht, etc. Und anhand deren Werte musst du dann rechnen.
 

MiMij

Bekanntes Mitglied
Also das mit dem Zeilenumbruch ist kein Problem. Ich kann problemlos mein chooseLine object aufrufen und fragen wie viel zeilen das hat. Wenns auf den Bildschirm passt mit der Zeilenanzahl, dann sag ich das er das zeichnen soll. Dann schau ich zum naechsten chooseLIne object und frag wieder wie viele Zeilen, passt es net drauf, beende ich die for schleife. scroll ich nun runter sag ich einfach das startline und die endline eins hoeher ist, jedoch funktioneirt das net so, hat nun die naechste vote option mehr Zeilen als die jetztige erste muss ich ja die startline mit mehr als 1 erhoehen.
 

The_S

Top Contributor
Dann hast du da wohl nen Fehler im Code ;) . Sry, hab grad net so die Muse mir dein Code anzugucken.
 

JimPanse

Bekanntes Mitglied
Hallo,

hab sowas ähnliches mal für eine Beschreibung für ein Spiel Programmiert. Ist aber schon lange her deshalb weiß ich nicht mehr genua die methoden

Eigentlich ganz Simple:

Code:
//Zeichne also von i bis index

for(int i = index; i < textListe.length && i < index; i++){

    arg0.drawString();
}

// key Event
public void keyPressed(keyEvent e){
switch(e){
down: index --;

up: index++;
}

repaint();
}

Das heißt wenn der Nutzer runter drückt wird immer i bis index + 1 (also neue Zeile angezeigt)!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Android Canvas - drawText - Update Text in ActionListener Android & Cross-Platform Mobile Apps 8
W Text input into editText Android & Cross-Platform Mobile Apps 2
W Edit Text Drawable Icon ändern plus Funktion Android & Cross-Platform Mobile Apps 30
R Google Text-to-Speech Android & Cross-Platform Mobile Apps 5
R wie verwende ich Cloud Text-to-Speech? Android & Cross-Platform Mobile Apps 4
R Android Text-To-Speech Android & Cross-Platform Mobile Apps 4
ruutaiokwu Android In einem Android-“Spinner”-Element GLEICHZEITIG Bild (links) UND Text (rechts) anzeigen Android & Cross-Platform Mobile Apps 0
J Android App - Browser öffnen und Text eingeben/Button click auslösen Android & Cross-Platform Mobile Apps 10
M ImageButton: Bild ausblenden und Text anzeigen Android & Cross-Platform Mobile Apps 2
Flynn Text-File auf externe Speicherkarte schreiben Android & Cross-Platform Mobile Apps 1
F Aufkalbbaren Text Android & Cross-Platform Mobile Apps 4
B Android Text von Android zu PC senden? Android & Cross-Platform Mobile Apps 5
C Android Bei Text "Popup" anzeigen Android & Cross-Platform Mobile Apps 2
Anfänger2011 Text to Speech Problem Android & Cross-Platform Mobile Apps 1
M Android Edittext width passend zum Text Android & Cross-Platform Mobile Apps 1
L Android Theorie: Umwandeln von Text in Morsecode Android & Cross-Platform Mobile Apps 15
R Android Layout Bild mit Text Android & Cross-Platform Mobile Apps 13
N Android Änderung von tabwidget height lässt text verschwinden Android & Cross-Platform Mobile Apps 3
L Android Text aus Textfeld speichern Android & Cross-Platform Mobile Apps 5
J in android app text automatisch kopieren Android & Cross-Platform Mobile Apps 2
S Android Zufällige Text wiedergabe Android & Cross-Platform Mobile Apps 6
G Android zur Laufzeit den Text im Menü ändern Android & Cross-Platform Mobile Apps 3
K Android schwarzer Bildschirm beim Rendern von Text und Dreiecken Android & Cross-Platform Mobile Apps 9
N Gibt es eine opensource Speech-to-Text engine? Android & Cross-Platform Mobile Apps 3
M Text in txt-Datei schreiben und nach ABC sortieren? Android & Cross-Platform Mobile Apps 2
G Text parsen String to Double Android & Cross-Platform Mobile Apps 2
Arif Android Canvas wird nicht gezeichnet? Android & Cross-Platform Mobile Apps 0
Dechasa Android Android - Canvas NullpointException Android & Cross-Platform Mobile Apps 2
Z Canvas onDraw() Variablen muss in der Methode initialisiert werden Android & Cross-Platform Mobile Apps 1
F Mit Canvas zeichen und durch einen Timer aktualiesieren Android & Cross-Platform Mobile Apps 1
J Canvas mit dem Accelorometersensor bewegen Android & Cross-Platform Mobile Apps 0
E Android Zeichnen auf Canvas - Teilbereich als Bild speichern Android & Cross-Platform Mobile Apps 3
B onDraw Canvas jede Millisekunde aufrufen? Android & Cross-Platform Mobile Apps 12
G canvas in view anzeigen Android & Cross-Platform Mobile Apps 10
B Java ME Canvas Android & Cross-Platform Mobile Apps 2
J Java ME Canvas Klasse Gameloop und Funktion Android & Cross-Platform Mobile Apps 2
B Java ME Leere Canvas Seite Android & Cross-Platform Mobile Apps 21
P Java ME Texteingabe Canvas Android & Cross-Platform Mobile Apps 2
D wie geht Klassenvererbung von Canvas Klassen Android & Cross-Platform Mobile Apps 2
U Probleme mit der drawString Methode bei Canvas Android & Cross-Platform Mobile Apps 8
H Canvas kann nichts auf Graphics drawen Android & Cross-Platform Mobile Apps 3
M Textfeld in Canvas, implementation der keys aendern Android & Cross-Platform Mobile Apps 8
M Wie in einer anderen "nicht canvas" klasse zeichne Android & Cross-Platform Mobile Apps 5
U ein texteingabefeld auf einem Canvas . Android & Cross-Platform Mobile Apps 2
A Problem: Canvas-Grösse Motorola RAZR v3r Android & Cross-Platform Mobile Apps 8
F Canvas Stringlänge Android & Cross-Platform Mobile Apps 2
Dimax WebApp vertikal scrollen Android & Cross-Platform Mobile Apps 10
T Android ScrollView Ganze Seite Scrollen Android & Cross-Platform Mobile Apps 3

Ähnliche Java Themen

Neue Themen


Oben