6

私が開発しているあるアプリImageButtonでは、選択した のコピーであるをプログラムで作成しようとしていますImageButtonが、画像は別の方法で色付けされています。たとえば、赤としましょう。

私が使用する場合PowerDuff.Mode.MULTIPLY

clonebutton.getDrawable().setColorFilter(0xFFFF0000,Mode.MULTIPLY);

すると、オリジナルもImageButton同じ色を共有しているため、色が赤に変わりますdrawable。2つの異なるを使用せずに、クローンボタンにのみフィルターを適用する方法はありますdrawablesか? たとえば、何らかの方法で、編集せずにクローンボタンの上にカラー化レイヤーを配置することは可能drawableですか?

更新 ドローアブルを可変として設定しました:

Drawable d = swipebutton.getDrawable();
d.mutate();
d.setColorFilter(0xFFFF0000,Mode.MULTIPLY);
swipebutton.setImageDrawable(d);

これにより、私の clonebutton がその状態を other と共有できなくなりdrawableますviews

4

3 に答える 3

16
Drawable buttonBackground = clonebutton.getDrawable();
buttonBackground = buttonBackground.mutate();
buttonBackground.setColorFilter(0xFFFF0000,Mode.MULTIPLY);

このドローアブルをミュータブルにします。この操作を元に戻すことはできません。変更可能なドローアブルは、その状態を他のドローアブルと共有しないことが保証されています。これは、リソースからロードされたドローアブルのプロパティを変更する必要がある場合に特に便利です。デフォルトでは、同じリソースからロードされたすべてのドローアブル インスタンスが共通の状態を共有します。1 つのインスタンスの状態を変更すると、他のすべてのインスタンスが同じ変更を受け取ります。変更可能な Drawable でこのメソッドを呼び出しても効果はありません。

于 2013-03-28T12:45:56.630 に答える
1

Lollipop では、やりたくない場合は、このプログラム、つまりカラーフィルターをまったく行う必要はありません。xml ドローアブルに色合いを設定するだけで実行できます。

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_back"
    android:tint="@color/red_tint"/>

色の数に制限がない場合、これはうまくいかないかもしれませんが、色が限られている場合、これは非常に良いオプションです。詳細については、私のブログ投稿をご覧ください

于 2014-12-09T17:11:12.057 に答える
0
Drawable d=clonebutton.getDrawable()
d.setColorFilter(0xFFFF0000,Mode.MULTIPLY);
clonebutton.setDrawable(d);

これを試してください: または、必要に応じて以下のコードを使用してください

 switch(v.getId())
{
case R.id.bt1:
    Drawable d=b11.getBackground();
    d.setColorFilter(Color.CYAN,PorterDuff.Mode.MULTIPLY);

    b11.setBackgroundDrawable(d);
    b12.setBackgroundResource(android.R.drawable.btn_default);
break;

case R.id.bt2:
//b2.getBackground().setColorFilter(Color.CYAN,PorterDuff.Mode.MULTIPLY);
Drawable dd=b12.getBackground();
dd.setColorFilter(Color.CYAN,PorterDuff.Mode.MULTIPLY);

b12.setBackgroundDrawable(dd);
b11.setBackgroundResource(android.R.drawable.btn_default);
break;
}

onclick 後のボタンの色の切り替え

于 2013-03-28T12:45:33.283 に答える