Android: добавление растровой текстуры в непрямоугольный элемент - PullRequest
0 голосов
/ 01 октября 2010

У меня есть виджет, который выглядит так:

alt text

Каждый конус является «осязаемым элементом». Теперь я хочу поместить растровую текстуру над каждым конусом. Однако все растровые изображения имеют прямоугольную форму, поэтому растровая текстура над одним конусом будет мешать растровой текстуре над другим конусом.

Мне интересно, что является лучшим решением для этого подхода. Должен ли я просто создать изображение, которое помещается (как прямоугольник) точно над конусом, и сделать неиспользуемые области прозрачными?

Второй вопрос: как растровые текстуры работают с растяжением? Потому что весь этот круг нарисован так, чтобы соответствовать всему размеру экрана, в то время как растровые текстуры в значительной степени одного размера.

1 Ответ

2 голосов
/ 01 октября 2010

От руки Я не могу придумать лучшего способа рисования растровых изображений на этих конусах, чем ваше собственное предложение об использовании прозрачных зон.

Однако я могу помочь с вашим вторым вопросом, поскольку растягивание растровых изображений не сложно.У вас есть несколько вариантов в классе Canvas.Например:

canvas.save();
canvas.scale(xRatio, yRatio);
canvas.drawBitmap(....);
canvas.restore();

Вы также можете использовать Матрицу, используя matrix.postScale(xRatio, yRatio), чтобы затем сгенерировать либо большее растровое изображение и нарисовать его нормально, либо передать матрицу в вашу команду canvas.drawBitmap(....), чтобы сделать еемасштабировать при рисовании.

Все эти методы предполагают, что у вас есть доступ к самому холсту для рисования.Если вы используете представление, вы можете создать его подкласс и переопределить метод onDraw(Canvas canvas), чтобы захватить холст, прежде чем он начнет его рисовать.Если вы используете SurfaceHolder, то вы уже должны знать, как получить холст.


Редактировать: я забыл третий метод, который собирался описать.Вы можете использовать canvas.drawBitmap(bitmap, srcRect, dstRect, paint), чтобы масштабировать растровое полотно по размеру целевого прямоугольника.Короче говоря, есть много способов сделать это - выберите самый простой в зависимости от вашего приложения!

...