Инвертировать цвета выделенного 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) }
Ответ 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) }