안드로이드에서 이미지 뷰의 색조를 프로그래밍 방식으로 설정하는 방법은 무엇입니까? 같이 사용하고 있습니다. imageView.setColorFilter(R.color.blue,android.graphics.PorterDuff.Mode.MULTIPLY); 그러나 변하지 않습니다 …

이미지보기에 색조를 설정해야합니다 … 다음과 같이 사용하고 있습니다.

imageView.setColorFilter(R.color.blue,android.graphics.PorterDuff.Mode.MULTIPLY);

그러나 변하지 않습니다 …



답변

다음 코드를 통해 색조를 매우 쉽게 변경할 수 있습니다.

imageView.setColorFilter(Color.argb(255, 255, 255, 255)); // 화이트 틴트

색조를 원한다면

imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), android.graphics.PorterDuff.Mode.MULTIPLY);

벡터 드로어 블

imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), android.graphics.PorterDuff.Mode.SRC_IN);

업데이트 :
@ADev는 여기 에 자신의 답변에 새로운 솔루션이 있지만 그의 솔루션에는 25.4.0 이상의 최신 지원 라이브러리가 필요합니다.


답변

대부분의 답변 setColorFilter은 원래 요청한 것이 아닌 사용 을 나타냅니다.

사용자 @Tad는 올바른 방향으로 답변 을 제공하지만 API 21 이상에서만 작동합니다.

모든 Android 버전에서 색조를 설정하려면 다음을 사용하십시오 ImageViewCompat.

ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(yourTint));

그 참고 yourTint이 경우에하는 것은 “컬러 INT”이어야합니다. 과 같은 색상 리소스가있는 경우 R.color.blue먼저 색상 int를로드해야합니다.

ContextCompat.getColor(context, R.color.blue);

답변

이것은 나를 위해 일했다

mImageView.setColorFilter(ContextCompat.getColor(getContext(), R.color.green_500));

답변

@Hardik이 옳습니다. 코드의 다른 오류는 XML 정의 색상을 참조 할 때 발생합니다. setColorFilterID를 사용하여 색상 자원을 찾고 자원setColorFilter메소드에 전달해야 할 때 ID 만 메소드에 전달했습니다 . 아래에서 원래 코드를 다시 작성하십시오.

이 라인이 활동 내에있는 경우 :

imageView.setColorFilter(getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY);

그렇지 않으면 주요 활동을 참조해야합니다.

Activity main = ...
imageView.setColorFilter(main.getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY);

정수, 부울, 차원 등과 같은 다른 유형의 리소스에서도 마찬가지입니다. 문자열을 제외하고 getString()첫 번째 호출없이 액티비티에서 직접 사용할 수 있습니다 getResources()(이유를 묻지 마십시오) .

그렇지 않으면 코드가 좋아 보입니다. (나는 setColorFilter방법을 너무 많이 조사하지는 않았지만 …)


답변

모든 방법을 시도한 후에 그들은 효과가 없었습니다.

다른 PortDuff.MODE를 사용하여 솔루션을 얻습니다.

imgEstadoBillete.setColorFilter(context.getResources().getColor(R.color.green),PorterDuff.Mode.SRC_IN);

답변

Lollipop부터 새로운 Palette 클래스와 함께 작동하는 BitmapDrawables에 대한 색조 메서드 도 있습니다 .

공공 무효 setTintList (ColorStateList 색조)

공공 무효 setTintMode (PorterDuff.Mode tintMode)

이전 버전의 Android에서는 DrawableCompat 라이브러리를 사용할 수 있습니다.


답변

이 시도. 지원 라이브러리가 지원하는 모든 Android 버전에서 작동해야합니다.

public static Drawable getTintedDrawableOfColorResId(@NonNull Context context, @NonNull Bitmap inputBitmap, @ColorRes int colorResId) {
    return getTintedDrawable(context, new BitmapDrawable(context.getResources(), inputBitmap), ContextCompat.getColor(context, colorResId));
}

public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Bitmap inputBitmap, @ColorInt int color) {
    return getTintedDrawable(context, new BitmapDrawable(context.getResources(), inputBitmap), color);
}

public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Drawable inputDrawable, @ColorInt int color) {
    Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable);
    DrawableCompat.setTint(wrapDrawable, color);
    DrawableCompat.setTintMode(wrapDrawable, PorterDuff.Mode.SRC_IN);
    return wrapDrawable;
}

위의 방법 중 하나를 사용하여 작동시킬 수 있습니다.

문서에서 DrawableCompat의 더 흥미로운 기능에 대한 내용은 여기를 참조하십시오 .