我正在尝试将特定颜色更改为九个补丁上的不同颜色。到目前为止,我能想到的唯一方法是 - 从资源中的九个补丁创建一个位图,复制位图使其变为可变并给它一个rgb-8888配置,通过改变颜色运行的方法,然后从位图创建一个新的九补丁。但是当我尝试从位图副本“变色后”获取新的九个补丁的byte []块数据时,它开始活动闪烁黑色并返回到父活动。如果我从“原始位图”中获取byte []块数据“在颜色变化之前”它可以工作但是无论它在哪里伸展它都会放置原始颜色。到目前为止,这是我的代码。
Bitmap backMap = BitmapFactory.decodeResource(getResources(),R.drawable.outerbackground);
byte[] chunk = backMap.getNinePatchChunk();
backMap = backMap.copy( Bitmap.Config.ARGB_8888, true);
backMap = getChangedColor(backMap, Color.rgb(212, 212, 212), Color.rgb(255, 50, 0));
NinePatchDrawable np_drawable = new NinePatchDrawable(getResources(), backMap, chunk, new Rect(), null);
np_drawable.setBounds(0, 0, backMap.getWidth(), backMap.getHeight());
我认为它用旧颜色延伸的原因是我在原始位图“颜色变化之前”得到的byte []块数据。我想我要么需要在“颜色变化后”从位图副本中获取块数据,要么弄清楚如何更改byte []块中的数据来表示颜色变化。如果有人知道如何做这项工作或更好的方法,我会非常感激。我被困在这一个星期。