Androidでビットマップの色を変更する方法を見つける必要があります。 int
の値に応じて、アプリケーションで楕円形の画像の色をスムーズに置き換える/変更する必要があります。画像の色をRED
に変更するよりもmyValue=5
の場合、myValue=322
の色をBLUE
に変更する場合のようなものが必要です。私がこれを行うことができると思う唯一の方法は、次のようなxmlファイルを使用することでした:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="oval" Android:padding="10dp">
<!-- you can use any color you want I used here gray color-->
<solid Android:color="#cccccc"/>
<corners
Android:bottomRightRadius="10dp"
Android:bottomLeftRadius="10dp"
Android:topLeftRadius="10dp"
Android:topRightRadius="10dp"/>
</shape>
その後、myValue
が変更されてImageView
画像リソースが設定されます。しかし、この方法で35の異なるxmlファイルを作成する必要があります...これは良い考えではないと思います。
それで、これを行うためのより良い解決策を提案できる人はいますか?
これが私がこの問題を解決した方法です:
ImageView
をsrc="@drawable/button"
で宣言しますDrawable
を作成し、それにColorFilter
を設定し、その後、次のように宣言されたImageView
へのsrcとして使用します。>>
Drawable myIcon = getResources().getDrawable( R.drawable.button );
ColorFilter filter = new LightingColorFilter( Color.BLUE, Color.BLUE );
myIcon.setColorFilter(filter);
color.setImageDrawable(myIcon);
この解決策は私にはあまりうまくいきません。一部の画像では、最終的な色が間違っていました。私は代わりにこのソリューションを使用します:
Drawable myIcon = getResources().getDrawable(R.drawable.your_image);
myIcon.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
((ImageView)findViewById(R.id.view_to_change)).setImageDrawable(myIcon);
getResources().getDrawable( R.drawable.button );
現在は非推奨です。この方法でも実行できます。
((ImageView) findViewById(R.id.my_icon))
.setColorFilter(new LightingColorFilter(Color.BLUE, Color.BLUE));
あなたはこれをする必要があります。
Drawable myIcon = getResources().getDrawable( R.drawable.button );
ColorFilter filter = new LightingColorFilter( Color.BLACK, Color.BLACK);
myIcon.setColorFilter(filter);
TransitionDrawableを使用してこれを実現できます--- http://developer.Android.com/reference/Android/graphics/drawable/TransitionDrawable.html