Как установить цветовой фильтр для рисования, которое будет использоваться в RemoteView?

У меня есть ImaveView на RemoteView для которого я должен применить фильтр. Когда не в RemoteView это то, что я делаю, и это работает хорошо:

    Drawable icon = getResources().getDrawable(R.drawable.icon);
    icon.setColorFilter(color, PorterDuff.Mode.SRC_IN);
    image.setImageDrawable(icon);

RemoteView Похоже, у меня нет способа установить рисование, которое не является ресурсом. Как бы я поступил так?

Благодарю.

2 ответа

Код ниже работал для RemoteViews, который представляет собой виджет ImageView на главном экране для изменения цвета оттенка. Протестировано на устройстве, работающем с API уровня 29

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

У меня была похожая проблема. Для меня решение было использовать растровое изображение. Эти два метода должны дать вам ответ или, по крайней мере, какое-то решение.

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 из макета

Вы всегда можете получить изображение из вашего ImageView и преобразовать его в растровое изображение.

Другие вопросы по тегам