PDA

View Full Version : [J2Me]Problema Con Un Programma Semplice Tipo Paint


dgiac
07-03-2011, 23:12
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Disegna extends MIDlet {

public void startApp() {
Display display = Display.getDisplay(this);
display.setCurrent(new Linea());
} // startApp

public void pauseApp() {
} // pauseApp

public void destroyApp(boolean unconditional) {
} // destroyApp

protected class Linea extends Canvas {
private int xAtt, yAtt, xPrec, yPrec;
private boolean primoTouch = true;

public Linea() {
setFullScreenMode(true);
} // Linea

public void pointerReleased (int x, int y) {
primoTouch = true;
} // pointReleased

public void pointerDragged (int x, int y) {
if(primoTouch) {
xAtt = x;
yAtt = y;
primoTouch = false;
} // if
xPrec = xAtt;
yPrec = yAtt;
xAtt = x;
yAtt = y;
repaint();
} // pointDragged

public void paint (Graphics g) {
g.drawLine(xPrec, yPrec, xAtt, yAtt);
} // paint
} // Linea
} // Disegna

Il problema è che finchè lo provo sull'emulatore funziona, ma sul telefono disegna le linee tutte tratteggiate, come su il repaint() non riuscisse a star dietro al movimento del dito.. Cosa posso fare?

PGI-Bis
08-03-2011, 08:05
e' un po' che non bazzico più j2me (diciamo una decina d'anni, via) ma a naso quel codice disegna 1 linea sola che inizia dal punto del trascinamento precedente a quello successivo. A video apparirebbe un singolo trattino, di volta in volta rinnovato, che segue "il dito".

Se vuoi disegnare una linea continua devi accumulare i punti:

punti = new short[1000]
int cursor = 0
...
pointerPressed(x, y)
punti[cursor++] = (short)x
punti[cursor++] = (short)y
...
pointerDragged(x,y)
if(cursor < punti.length - 1) {
punti[cursor++] = (short)x
punti[cursor++] = (short)y
repaint()
}
...
pointerReleased(x, y)
cursor = 0;
repaint();
....
paint(Graphics g)
for(int i = 2; i < cursor - 2; i+=2)
g.drawLine(punti[i-2], punti[i -1], punti[i], punti[i+1])

dgiac
08-03-2011, 08:12
Ma il codice che ho fatto io non disegna già ogni volta una linea che va da (xPrec, yPrec) a (xAtt, yAtt)??

PGI-Bis
08-03-2011, 08:20
Il buffer a cui accedi con "graphics" è cancellato ad ogni invocazione del metodo paint prima di applicare il nuovo disegno, così quello che ci hai disegnato sopra la volta prima scompare.

dgiac
08-03-2011, 09:23
perfetto.. funziona! grazie..