如何在通知内为ImageView设置十六进制颜色?

时间:2017-07-04 14:07:27

标签: android bitmap hex android-notifications

我尝试将颜色设置为自定义通知中存在的ImageView的图像。我可以通过写这一行来给它预定义的颜色:

remoteViews.setImageViewResource(R.id.imageView, R.color.Green);

但是我希望能够给它十六进制颜色值,并将其设置为颜色。我尝试将颜色设置为ImageView的背景,但我无法访问它,我必须访问ImageView的唯一选项是:

remoteViews
    .setImageViewResource()
    .setImageViewBitmap()
    .setImageViewIcon()
    .setImageViewUri()

有没有办法通过将十六进制值解析为其中任何一种来传递颜色? 我想如果我能够创建一个位图并将位图设置为图像视图,那么就可以完成,所以我编写下面的代码来创建位图:

    int[] colors = {Color.parseColor("#64DD17"), Color.parseColor("#D32F2F")};
    Bitmap bitmap = Bitmap.createBitmap(colors, 10, 10, Bitmap.Config.RGB_565);

,但我得到了一个 java.lang.ArrayIndexOutOfBoundsException 。我尝试了colors数组中的一个元素,但同样的错误。 我的错误是什么?

2 个答案:

答案 0 :(得分:1)

int[]是你的形象;所以你创建一个宽2px的图像,因为这是你的数组的长度。不过,您拨打createBitmap并指定该图片实际上是10px x 10px;这就是ArrayIndexOutOfBoundsException被抛出的原因,因为Android开始寻找不存在的像素。

使用Bitmap bitmap = Bitmap.createBitmap(colors, 2, 1, Bitmap.Config.RGB_565);可以解决这个问题,虽然会生成一个非常小的图像!

答案 1 :(得分:0)

简单解决方案:生成png图像(或使用svg)放入图像视图,而不是您想要的颜色。

但是,如果你想使用这种方法,你可以使用类似的东西创建彩色位图:

Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
  image.eraseColor(android.graphics.Color.GREEN);