Ваша битовая глубина холста RGB_565 или ARGB_8888? Я проверил это в обоих форматах. Он работал на 32-битном холсте, но не работал на 16-битном холсте. 16-битное изображение, скорее всего, не может отображать точный цвет, который вы рисуете (0xFF0000FF), поэтому оно меняется очень незначительно (и незаметно для глаз человека), когда вы рисуете первый синий круг. Затем, когда вы выполняете избегание, нацеливая точный синий цвет с допуском нуля, ничего не отображается, потому что истинного синего нет на изображении.
Допустимое отклонение 255 работает, поскольку оно позволяет избежать совпадения с "почти синим" цветом, и в результате будет получен круг, "почти красный". Если используется допуск, который высокий, вызывает беспокойство, попробуйте очень низкие допуски (начиная с 1 и повышаясь), пока не найдете малый, но все еще совпадающий с «почти синим», который вы хотите заменить.
Идеальным решением было бы прочитать значение цвета синего круга после его рисования и нацелиться на этот точный цвет. Это было бы возможно, если бы у вас было изображение холста, с которым вы работаете, и вы могли бы позвонить bitmap.getPixel()
. Однако я не знаю ни одного способа получить растровое изображение холста, если у вас его еще нет (чего нет у метода onDraw).