Para mi sorpresa, me acaba de descubrir que drawLine y drawRect no incluyen la posición final, es decir .:Lienzo 'drawLine y drawRect sin incluir la posición final?
canvas.drawLine(100, 100, 100, 100, paint);
o
RectF rect = new RectF(100, 100, 100, 100);
canvas.drawRect(rect, paint);
no va a dibujar cualquier cosa.
Mi pintura se define como sigue:
Paint paint = new Paint();
paint.setAntiAlias(false);
paint.setStyle(Paint.Style.FILL);
return paint;
He intentado definir mi pintura como FILL_AND_STROKE, pero no ayudaría.
DrawPaint de Android() javadoc ni siquiera muestra los parametros stopX y stopY!
Así, si quiero dibujar una línea vertical que va exactamente de BeginY a Endy (ambos inclusive), tengo que hacer lo siguiente:
canvas.drawLine(constX, beginY, constX, endY + 1)
en cuenta que yo no sumar 1 al final Posición X, solo para terminar Y (xstays lo mismo que quiero una línea vertical).
Mi dispositivo es HTC SENSE.
Edit: Simon, tienes razón, en lugar de hacerte una pregunta. Acabo de tratar de compartir mi sensación de sorpresa de que Android no hace lo que dicen sus documentos en un caso tan fundamental como el dibujo básico, y asegúrate que no cometí ningún error estúpido en mi camino.
hacerme más claro: javadoc de drawRect dice:
pública drawRect vacío (flotar a la izquierda, flotar arriba, flotar bien, flotar inferior, pintura Paint)
dibujar el Rect especificado mediante el pintura especificada El rectángulo se rellenará o enmarcará según el estilo de la pintura.
izquierda - El lado izquierdo del rectángulo que se puede extraer
superior - El lado superior del rectángulo que se puede extraer
derecha - El lado derecho del rectángulo que se puede extraer
inferior - la parte inferior del rectángulo que se puede sacar
pintura - la pintura que se usa para dibujar el rect
Así, al escribir
canvas.drawRect(x1, y1, x2, y2)
Espera un rectángulo cuyas esquinas están en (x1, y1); (x1, y2); (x2, y1) y (x2, y2).
Android dice: ¡mal! Estarán en (x1, y1); (x1, y2-1); (x2-1, y1) y (x2-1, y2-1).
Para los curiosos: establecer el recorte de tela:
canvas.clipRect(x1, y1, x2, y2)
luego tratar de dibujar un punto:
canvas.drawPoint(x1, y1, paint);
y se obtiene un punto en la pantalla.
A continuación, intente en la esquina opuesta:
canvas.drawPoint(x2, y2, paint);
no aparece nada. tampoco aparecerá nada en las 2 esquinas restantes:
canvas.drawPoint(x1, y2, paint);
canvas.drawPoint(x2, y2, paint);
¿Todavía no sorprende a usted gente?
Así que la conclusión es que Android trata derecho y inferior coordina tan exclusiva, lo que significa que, por ejemplo, al escribir:
canvas.clipRect(x1, y1, x2, y2)
Usted recibirá los límites de recorte de (x1, y1, x2 - 1, y2 - 1). Lo mismo ocurre con todos los métodos que tengan y coordenadas de fondo Rect/RectF objetos.
¿Hay alguna pregunta aquí? Si desea dibujar un solo punto, utilice: http://developer.android.com/reference/android/graphics/Canvas.html # drawPoint (float,% 20float,% 20android.graphics.Paint) –
Esto no es una pregunta, pero me alegra que esté aquí. Me ahorra haciendo experimentos para encontrar la respuesta a esta otra pregunta: http://stackoverflow.com/questions/3063892/canvas-clipping-right-right-bottom-edge-inclusive –