Я обнаружил проблему, изложив вкратце: шейдеры на растровых изображениях не работают таким образом.
Чтобы нарисовать прямоугольник, мозаичный с определенным Bitmap
, вы должны использовать Canvas.drawRect()
с Paint
который имеет BitmapShader
.Тем не менее, Android dev никогда не может быть таким простым.
Сначала вы должны вырезать srcRect
до отдельного Bitmap
(где-то это кешируется, так как я не думаю, что это дешевооперация), вот так:
Bitmap t = Bitmap.createBitmap(b, srcRect.left, srcRect.top, srcRect.right-srcRect.left, srcRect.bottom-srcRect.top);
Затем вам нужно создать Paint
и BitmapShader
:
BitmapShader bs = new BitmapShader(t, TileMode.REPEAT, TileMode.REPEAT);
Paint p = new Paint();
p.setShader(bs);
Затем вы можете наконец нарисовать прямоугольник назначения, носначала вам нужно настроить матрицу перевода для шейдера, иначе она не запустится с правильного места и может полностью зависнуть, если ваш режим плиток - CLAMP
:
Matrix m = new Matrix();
m.postTranslate(dstRect.left, dstRect.right);
p.getShader().setMatrix(m);
canvas.drawRect(dstRect, p);