web-dev-qa-db-ja.com

imageviewにカラーフィルターを追加したい

ColorFilterImageViewに追加したいと思います。

現在、私は使用しています:

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);

SRC_INPotterDuffなどのSRCで複数のモードをチェックしましたが、どのモードでも違いはありません...すべてのモードで完全なImageViewは完全な赤色です。

既存の画像にREDカラーをブレンドして、画像がREDDISHの色合いで見えるようにする必要があります。

22

正しい方法はPorterDuff.Mode.LIGHTENを使用することでした。

したがって、更新されたコードは次のようになります。

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN);
31

XmlファイルでAndroid:tintlink )を使用できます。例:

<ImageView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:src="@drawable/your_drawable"
    Android:tint="@color/your_color" />
8

これは私のために働いた:

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);

それが役立つことを願っています。

7
Thomas

他の解決策として、PorterDuff.Mode.SRC_ATOPモードで、別のアルファを使用して透明色にします。

アルファ値として155を使用します。

  final int semiTransparentGrey = Color.argb(155, 185, 185, 185);
  drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP);
5
L. G.

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);

1