如何在NinePatchDrawable上使用矩阵?

时间:2017-05-18 09:49:14

标签: android matrix drawable

现在我遇到了NinePatchDrawable的问题。

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);
R.miamap.bg_bubble 是一个9-Patch图像,应该添加上面的矩阵

以前,它不是9补丁图像,我使用下面的代码

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);

但现在,它是一个9补丁图像,所以我不知道该怎么做。我在Google上搜索解决方案,但没有结果。

2 个答案:

答案 0 :(得分:1)

不要这样做。

阅读此行

  

NinePatch类允许在九个或更多部分中绘制位图。   从本质上讲,它允许创建可扩展的自定义图形   当图像中添加的内容超出时,您定义的方式   图形的正常边界。

答案 1 :(得分:0)

哦,好像我是以机会主义的方式做到了。我想要旋转9补丁图像,但由于内容词的数量,图像也有不同的大小。请参阅以下代码:

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);

这就是我所做的。见下图: enter image description here

我所说的'机会主义'是我的9补丁图像的左边和上边的黑点必须在中心,以便当我旋转它时,图像不会被错误拉伸办法 !!!哈...