studio hacer example ejemplo circulos animaciones android drawing image-clipping

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