이미지보기에 색조를 설정해야합니다 … 다음과 같이 사용하고 있습니다.
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 정의 색상을 참조 할 때 발생합니다. setColorFilter
ID를 사용하여 색상 자원을 찾고 자원 을 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의 더 흥미로운 기능에 대한 내용은 여기를 참조하십시오 .