J'écris une coutume View
, mais je ne peux pas vraiment comprendre comment utiliser clipRect
sur un Canvas
. J'ai besoin parce que je vous appelle draw(Canvas)
sur un autre objet, et je voudrais donner mon (rognée) Canvas
. Ma solution actuelle est:Comment utiliser correctement clipRect?
StaticLayout sl = new StaticLayout(text, tp, (int) (rect.right - rect.left), Alignment.ALIGN_NORMAL, 1f, 0f, true);
Bitmap layoutBitmap = Bitmap.createBitmap((int) (rect.right - rect.left), (int) (rect.bottom - rect.top), Config.ARGB_8888);
Canvas layoutCanvas = new Canvas(layoutBitmap);
sl.draw(layoutCanvas);
canvas.drawBitmap(layoutBitmap, null, rect, null);
Cependant, cela se sent sale, la création d'une nouvelle image et une nouvelle toile à chaque fois (j'utilise cette méthode pour dessiner le texte dans une boîte, voir my previous question).
Ce que je voudrais faire est quelque chose comme ceci:
StaticLayout sl = new StaticLayout(text, tp, (int) (rect.right - rect.left), Alignment.ALIGN_NORMAL, 1f, 0f, true);
canvas.save();
canvas.clipRect(rect, Region.Op.REPLACE);
sl.draw(canvas);
canvas.restore();
Ce « sent » bien mieux, sauf que cela ne fonctionne pas. Est-ce que j'utilise clipRect
incorrect? Est-ce que je ne comprends pas ce que c'est réellement ou comment l'utiliser? S'il vous plaît donnez votre avis.
P.S. Ma compréhension de clipRect
est que, après cet appel clipRect
, 0, 0
devrait effectivement se traduire par rect.left, rect.top
.