[안드로이드] SeekBar의 Thumb 색상 실시간 변화주기, BlendModeColorFilter 사용하기 (feat. ColorFilter deprecated)
금번에 SeekBar의 Thumb에 새로운 인터랙션을 주게 되면서
기존에 적용해 둔 Listener에 ColorFilter를 먹이고자 했다.
하지만 ColorFilter를 먹이던 시절은 이미 오래 전이었고.. 현재는 deprecated 된 요소였던 것이다.
그러면 무엇을 써야하는 것인가? 검색을 통해 BlendModeColorFilter라는 클래스를 찾을 수 있었다.
BlendModeColorFilter | Android 개발자 | Android Developers
BlendModeColorFilter public final class BlendModeColorFilter extends ColorFilter A color filter that can be used to tint the source pixels using a single color and a specific BlendMode. Summary Public methods boolean equals(Object object) Indicates whether
developer.android.com
이 클래스를 통해 기존 PorterduffMode에서 사용하던 파라미터들을 그대로 적용해 쓸 수 있었고,
결과적으로 progress 값에 따라 Thumb의 색상이 바뀌도록 할 수 있었다.
- seekbar의 참조는 binding 클래스를 통해 참조하였으며, 이는 findViewById 등으로도 대체가 가능하다.
var dynamicThumbColor: Int
val seekbarChangeListener = object: Seekbar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
// argb의 alpha의 경우 MAX 값이 255라는 걸 유념할 것.
// MAX_RGB는 255로 지정해 progress 값에 따라 빨간색에서 파란색으로 색상이 변경되도록 하였음.
// 별도의 매핑 연산을 넣지 않아 러프하게 색상이 들어갈 것임.
dynamicThumbColor = Color.argb(255, MAX_RGB-progress, 0, progress)
binding.balanceSeekbar.thumb.mutate().colorFilter =
BlendModeColorFilterCompat.createBlendModeColorFilterCompat(dynamicThumbColor,
BlendModeCompat.SRC_ATOP)
binding.balanceSeekbar.invalidate()
}
https://stackoverflow.com/questions/56716093/setcolorfilter-is-deprecated-on-api29/56717316
setColorFilter is deprecated on API29
I use the following line to change the color of a VectorDrawable: mydrawable.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_ATOP) This works nice, though it is now deprecated. The
stackoverflow.com