hacer - canvas android example
¿Puedo dibujar fuera de los límites de un Android Canvas? (5)
La respuesta que @numan dio está casi bien, el problema es la asignación de memoria con ese enfoque, por lo que deberíamos estar haciendo esto, en su lugar:
// in constructor/elsewhere
Rect newRect = new Rect();
// in onDraw
canvas.getClipBounds(newRect);
newRect.inset(0, -20); //make the rect larger
canvas.clipRect(newRect, Region.Op.REPLACE);
Eso resuelve el problema :-)
Estoy portando una aplicación escrita en un entorno gráfico que permite que el dibujo se realice fuera de los límites del rectángulo de recorte. ¿Alguna forma de hacer esto en Android?
Para dibujar fuera de los límites, debe expandir el clipRect del lienzo.
Echa un vistazo a los métodos clipRect sobrecargados en la clase Canvas.
Nota: deberá especificar la operación de región porque la operación predeterminada es INTERSECT. Así que algo como esto:
Rect newRect = canvas.getClipBounds();
newRect.inset(-5, -5) //make the rect larger
canvas.clipRect (newRect, Region.Op.REPLACE);
//happily draw outside the bound now
Puede dibujar donde quiera, pero nada se guardará fuera del rectángulo de recorte.
Si desea dibujar texto fuera de los límites en TextView, debería hacer esto en su lugar:
<TextView
...
android:shadowColor="#01000000"
android:shadowDx="100" // out of right bound
android:shadowDy="0"
android:shadowRadius="1"
.../>
No está funcionando para usar clipRect () como la respuesta de @ numan porque el clip TextView es propio en OnDraw ():
if (mShadowRadius != 0) {
clipLeft += Math.min(0, mShadowDx - mShadowRadius);
clipRight += Math.max(0, mShadowDx + mShadowRadius);
clipTop += Math.min(0, mShadowDy - mShadowRadius);
clipBottom += Math.max(0, mShadowDy + mShadowRadius);
}
canvas.clipRect(clipLeft, clipTop, clipRight, clipBottom);
Por último, pero no menos importante, no olvides configurar android:clipChildren="false"
y android:clipToPadding="false"
en tu ViewGroup primario
tratar de establecer
android:clipChildren="false"
a la vista principal