Con mia grande sorpresa ho appena scoperto che drawLine e drawRect non comprendono la posizione finale, cioè .:Canvas 'drawLine e drawRect che non includono la posizione finale?
canvas.drawLine(100, 100, 100, 100, paint);
o
RectF rect = new RectF(100, 100, 100, 100);
canvas.drawRect(rect, paint);
non sarà disegnare nulla.
La mia pittura è definito come segue:
Paint paint = new Paint();
paint.setAntiAlias(false);
paint.setStyle(Paint.Style.FILL);
return paint;
Ho cercato di definire la mia pittura come FILL_AND_STROKE, ma non sarebbe di aiuto.
drawPaint di Android() javadoc non elenca nemmeno i parametri stopX e stopY!
Quindi, se voglio tracciare una linea verticale che va esattamente da BeginY a Endy (incluso), devo fare quanto segue:
canvas.drawLine(constX, beginY, constX, endY + 1)
Si noti che non ho aggiunto 1 al finale Posizione X, solo per terminare Y (xstays uguale a come voglio una linea verticale).
Il mio dispositivo è HTC SENSE.
Modifica: Simon, hai ragione, piuttosto che fare una domanda Ho appena provato a condividere la mia sensazione di sorpresa che Android non fa quello che i suoi doc dicono in un caso così fondamentale come il disegno di base, e assicurati che non ho fatto nessuno stupido errore sulla mia strada.
per farmi più chiaro: javadoc di drawRect dice:
pubblico drawRect void (float a sinistra, galleggiare in alto, galleggiare a destra, galleggiare in basso, Paint Paint)
Disegnare il rettangolo specificato utilizzando il vernice specificata. Il rettangolo verrà riempito o incorniciato in base allo stile nella pittura.
sinistro - Il lato sinistro del rettangolo da disegnare
superiore - Il lato superiore del rettangolo da disegnare
destra - Il lato destro del rettangolo da disegnare
fondo - il lato inferiore del rettangolo da disegnare
vernice - la vernice utilizzata per disegnare il rect
Così, quando si scrive
canvas.drawRect(x1, y1, x2, y2)
si aspetta un rettangolo i cui angoli sono a (x1, y1); (x1, y2); (x2, y1) e (x2, y2).
Android dice: sbagliato! Saranno a (x1, y1); (x1, y2-1); (x2-1, y1) e (x2-1, y2-1).
Per i più curiosi: impostare il clipping tela:
canvas.clipRect(x1, y1, x2, y2)
quindi provare a disegnare un punto:
canvas.drawPoint(x1, y1, paint);
e si ottiene un punto sullo schermo.
quindi provare nell'angolo opposto: appare
canvas.drawPoint(x2, y2, paint);
nulla. nulla apparirà nelle restanti 2 angoli così:
canvas.drawPoint(x1, y2, paint);
canvas.drawPoint(x2, y2, paint);
Ancora non non è sorprendente per voi gente?
Quindi la conclusione è che Android tratta destra e inferiore coordinate esclusivo, nel senso che ad esempio quando si scrive:
canvas.clipRect(x1, y1, x2, y2)
Otterrete i limiti di ritaglio di (x1, y1, x2 - 1, y2 - 1). Lo stesso vale per ogni metodo che prende a destra e in basso coordinate o oggetti Rect/RectF.
C'è una domanda qui? Se si desidera disegnare un singolo punto, utilizzare: http://developer.android.com/reference/android/graphics/Canvas.html # drawPoint (float,% 20float,% 20android.graphics.Paint) –
Questa non è una domanda, ma sono contento che sia qui. Mi fa risparmiare sperimentando per trovare la risposta a questa altra domanda: http://stackoverflow.com/questions/3063892/canvas-clipping-rect-right-bottom-edge-inclusive –