如何在将在RemoteView中使用的drawable上设置滤色器?

时间:2015-07-01 18:23:15

标签: android android-widget android-notifications remoteview android-remoteview

我在MyForm上有一个ImaveView,我必须为其应用过滤器。如果不在RemoteView这就是我的工作,而且运作良好:

RemoteView

Drawable icon = getResources().getDrawable(R.drawable.icon); icon.setColorFilter(color, PorterDuff.Mode.SRC_IN); image.setImageDrawable(icon); 似乎没有方法让我设置不是资源的drawable。我该怎么做呢?

感谢。

1 个答案:

答案 0 :(得分:2)

我有类似的问题。对我来说,解决方案是使用位图。这两种方法应该给你答案或至少某种解决方案。

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获取绘图并将其转换为位图。