如何为将在RemoteView中使用的可绘制对象设置颜色过滤器?

6

我在一个RemoteView上有一个ImaveView,需要应用一个过滤器。当不在RemoteView时,我这样做,它可以正常工作:

    Drawable icon = getResources().getDrawable(R.drawable.icon);
    icon.setColorFilter(color, PorterDuff.Mode.SRC_IN);
    image.setImageDrawable(icon);
< p > RemoteView 似乎没有让我设置一个不是资源的可绘制对象的方法。那我该怎么做呢?

谢谢。

2个回答

8

以下代码适用于远程视图(RemoteViews),可用于在主屏幕小部件中更改ImageView的色调颜色。 已在运行API级别29的设备上进行了测试。

remoteViews.setInt(R.id.myRemoteViewId, "setColorFilter", Color.parseColor("#000000"))

1

我曾经遇到过类似的问题。我的解决方案是使用位图。这两种方法应该能够给你答案或者至少提供某种解决方案。

private void setCurrentStatus(Context context, RemoteViews remoteViews) {
    Bitmap source = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher);
    Bitmap result = changeBitmapColor(source, Color.YELLOW);

    remoteViews.setBitmap(R.id.iv_icon, "setImageBitmap", result);
}

private Bitmap changeBitmapColor(Bitmap sourceBitmap, int color) {
    Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap, 0, 0,
            sourceBitmap.getWidth() - 1, sourceBitmap.getHeight() - 1);
    Paint p = new Paint();
    ColorFilter filter = new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN);
    p.setColorFilter(filter);

    Canvas canvas = new Canvas(resultBitmap);
    canvas.drawBitmap(resultBitmap, 0, 0, p);

    return resultBitmap;
}

R.id.iv_icon - 是布局中ImageView的id。

您可以随时从ImageView获取drawable并将其转换为位图。


还有一种“色调”解决方案,包括在XML中吗? - android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接