Инвертировать цвета выделенного Android
Можно ли "инвертировать" цвета в Drawable? Вы знаете, что у вас есть в негативе?
Я знаю, что можно изменить Drawable на черно-белый... как насчет инверсии цветов?
Спасибо!
Ответы
Ответ 1
После некоторых исследований выяснилось, что решение намного проще, чем я думал.
Вот он:
/**
* Color matrix that flips the components (<code>-1.0f * c + 255 = 255 - c</code>)
* and keeps the alpha intact.
*/
private static final float[] NEGATIVE = {
-1.0f, 0, 0, 0, 255, // red
0, -1.0f, 0, 0, 255, // green
0, 0, -1.0f, 0, 255, // blue
0, 0, 0, 1.0f, 0 // alpha
};
drawable.setColorFilter(new ColorMatrixColorFilter(NEGATIVE));
Ответ 2
Лучший способ сделать это - преобразовать ваш drawable в растровое изображение:
Bitmap fromDrawable = BitmapFactory.decodeResource(context.getResources(),R.drawable.drawable_resource);
И затем инвертируйте его как:
fooobar.com/questions/489284/...
А затем вернитесь к чертежу, если вам нужно:
Drawable invertedDrawable = new BitmapDrawable(getResources(),fromDrawable);
Ответ 3
По вашему ответу я создал короткое расширение Kotlin для Drawable
private val negative = floatArrayOf(
-1.0f, .0f, .0f, .0f, 255.0f,
.0f, -1.0f, .0f, .0f, 255.0f,
.0f, .0f, -1.0f, .0f, 255.0f,
.0f, .0f, .0f, 1.0f, .0f
)
fun Drawable.toNegative() {
this.colorFilter = ColorMatrixColorFilter(negative)
}