4

フィルタを適用する必要がある がありますImaveViewRemoteViewこれが私がしていることではないときRemoteView、それはうまくいきます:

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

リソースではないドローアブルを設定するRemoteView方法がないようです。どうすればこれを行うことができますか?

ありがとう。

4

2 に答える 2

4

以下のコードは、色合いを変更するためのホーム画面ウィジェットの ImageView である RemoteViews に対して機能しました。API レベル 29 で動作するデバイスでテスト済み

remoteViews.setInt(R.id.myRemoteViewId, "setColorFilter", Color.parseColor("#000000"))
于 2021-05-22T07:07:25.317 に答える
1

同様の問題がありました。私にとっての解決策は、ビットマップを使用することでした。これらの 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 からドローアブルを取得して、ビットマップに変換できます。

于 2015-10-07T10:21:20.353 に答える