以编程方式更改ninepatch的颜色

时间:2012-12-26 21:34:35

标签: java android bitmap nine-patch

  

可能重复:
  convert bitmap into ninepatch to use as background

我正在尝试将特定颜色更改为九个补丁上的不同颜色。到目前为止,我能想到的唯一方法是 - 从资源中的九个补丁创建一个位图,复制位图使其变为可变并给它一个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 []块中的数据来表示颜色变化。如果有人知道如何做这项工作或更好的方法,我会非常感激。我被困在这一个星期。

0 个答案:

没有答案