ColorFilter
をImageView
に追加したいと思います。
現在、私は使用しています:
ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
SRC_IN
、PotterDuff
などのSRC
で複数のモードをチェックしましたが、どのモードでも違いはありません...すべてのモードで完全なImageView
は完全な赤色です。
既存の画像にREDカラーをブレンドして、画像がREDDISHの色合いで見えるようにする必要があります。
正しい方法はPorterDuff.Mode.LIGHTEN
を使用することでした。
したがって、更新されたコードは次のようになります。
ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN);
XmlファイルでAndroid:tint( link )を使用できます。例:
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/your_drawable"
Android:tint="@color/your_color" />
これは私のために働いた:
res/colors.xml内:
<color name="highlight_color_filter">#A5FF0000</color>
アクティビティでフィルターを初期化し、ペイントを強調表示します。
int highlightColor = context.getResources().getColor(R.color.highlight_color_filter);
PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(highlightColor, PorterDuff.Mode.SRC_ATOP);
Paint redHighLight = new Paint();
redHighLight.setColorFilter(targetHitFilter);
redHighLight.setAlpha(190);
次に、ImageViewにフィルターを適用します。
ImageView iv=(ImageView)findViewById(ResIdOfImageToFilter);
iv.setColorFilter(redHighLight);
それでもうまくいかない場合は、ImageViewのドロアブルに適用してみてください。
iv.getDrawable().setColorFilter(redHighLight);
それが役立つことを願っています。
他の解決策として、PorterDuff.Mode.SRC_ATOP
モードで、別のアルファを使用して透明色にします。
アルファ値として155を使用します。
final int semiTransparentGrey = Color.argb(155, 185, 185, 185);
drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP);
Xmlファイルでは、ユーザーtintを使用できます。たとえば、
_ <ImageView
Android:id="@+id/scrachImage_1"
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:tint="@color/colorAccent"
Android:src="@drawable/eagle" />
_
プログラムでカラーフィルターを追加する場合は、
_scratchImage_2.setColorFilter(Color.BLACK);
_
次のコードを使用して、このカラーフィルターを削除することもできます。
scratchImage_2.setColorFilter(null);