2017-05-18 8 views
0

Jetzt habe ich ein Problem mit NinePatchDrawable.Wie Matrix auf NinePatchDrawable verwenden?

Matrix matrix = new Matrix(); 
matrix.postScale(1, -1); 
.... 
NinePatchDrawable npd = (NinePatchDrawable) getResources().getDrawable(R.mipmap.bg_bubble); 
Rect rect = new Rect((int) (curPointX + offsetX), (int) (curPointY + offsetY), (int) (curPointX + offsetX + bubbleImgWidth), (int) (curPointY + offsetY + bubbleImgHeight)); 
npd.setBounds(rect); 
npd.draw(canvas); 

die R.miamap.bg_bubble ist ein 9-Patch-Bild, sollte es die Matrix oben zugegeben werden.

Bevor es kein 9-Patch-Bild ist, habe ich den Code unter

mBubbleBitmap = BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.bg_bubble); 
... 
Matrix matrix = new Matrix(); 
matrix.postScale(1, -1); 
... 
Bitmap dstBmp = Bitmap.createBitmap(mBubbleBitmap, 0, 0, mBubbleBitmap.getWidth(), mBubbleBitmap.getHeight(), matrix, true); 

Aber jetzt, es ist ein 9-Patch-Bild, so dass ich weiß nicht, wie es zu tun. Und ich suche die Lösung bei Google, aber ohne Ergebnis.

+1

Nein, ** du kannst nicht **. Weil ein 9-Patch seine Patch-Eigenschaften verlieren wird, wenn skaliert oder rotiert oder anderweitig manipuliert wird. Was eigentlich Sinn macht, wenn man versteht, wie ein 9-Patch funktioniert. Du ** könntest ** an allem arbeiten, ABER dem 1px Rand, aber es wäre ein Overkill. Bereiten Sie einfach 2 Versionen Ihres 9-Patches vor (normal und gedreht) und Sie können loslegen. –

Antwort

1

Do not dies tun.

dieser Linie

Die NinePatch erlaubt Klasse gelesen eine Bitmap in neun oder mehr Abschnitte Zeichnung. Im Wesentlichen ermöglicht es die Erstellung von benutzerdefinierten Grafiken, die die Art und Weise skalieren, die Sie definieren, wenn der Inhalt innerhalb des Bildes die normalen Grenzen der Grafik überschreitet.

0

Oh, es scheint so, als hätte ich es opportunistisch gemacht. Genau will ich das 9-Patch-Bild drehen, aber das Bild hat wegen der Anzahl der Inhaltswörter auch eine andere Größe. Siehe Code unten:

mBubbleBitmap = BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.bg_bubble); 
... 
Matrix matrix = new Matrix(); 
matrix.postScale(1, -1); 
// get the original bitmap with matrix 
Bitmap dstBmp = Bitmap.createBitmap(mBubbleBitmap, 0, 0, mBubbleBitmap.getWidth(), mBubbleBitmap.getHeight(), matrix, true); 
// translate it to a NinePatchDrawable drawable. 
// Note: the third arg must be the original bitmap's chunk, because the dstBmp has no 9-patch chunk info. 
NinePatchDrawable npd = new NinePatchDrawable(getResources(), dstBmp, mBubbleBitmap.getNinePatchChunk(), new Rect(), null); 
// Draw it! 
Rect rect = new Rect((int) (curPointX + offsetX), (int) (curPointY + offsetY), (int) (curPointX + offsetX + bubbleImgWidth), (int) (curPointY + offsetY + bubbleImgHeight)); 
npd.setBounds(rect); 
npd.draw(canvas); 

Das ist, was ich getan habe. siehe Bild unten: enter image description here

Was ich sage, ‚opportunistisch‘ ist, dass mein 9-Patch-Bild schwarze Punkte von links und oben müssen IN DER MITTE so, dass wenn ich es drehen, wird das Bild nicht gestreckt werden falsch! hah ...

Verwandte Themen