可能重复:
将位图转换为 Ninepatch 以用作背景
我正在尝试在九个补丁上将特定颜色更改为不同的颜色。到目前为止,我能想到的唯一方法是 - 从资源中的 Ninepatch 创建位图,复制位图以使其可变并为其提供 rgb-8888 配置,通过更改颜色运行的方法,然后从位图创建一个新的九个补丁。但是当我尝试从位图副本“颜色更改后”获取新的九个补丁的字节 [] 块数据时,它开始活动闪烁黑色并返回到父活动。如果我“在颜色变化之前”从原始位图中获取 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[] 块中的数据以表示颜色变化。如果有人对如何使这项工作或更好的方法有所了解,我将非常感激。我已经坚持了一周。