Вертикально-полосатый фон в XML? - PullRequest
11 голосов
/ 18 февраля 2011

Я хочу установить вид фона, который представляет собой регулярную сетку из вертикальных полос.Полосы чередуются между двумя цветами.(Например, в одной строке может быть 6 пикселей светло-серого цвета, за которыми следуют 2 пикселя темно-серого цвета, повторяемые для заполнения ширины.)

Это достаточно легко сделать с помощью растрового изображения (либо какресурс или сгенерированный в коде).Например:

ShapeDrawable bg = new ShapeDrawable(new RectShape());
int[] pixels = new int[] { 0xFFCCCCCC, 0xFFCCCCCC, 0xFFCCCCCC,
    0xFFCCCCCC, 0xFFCCCCCC, 0xFFCCCCCC, 0xFF999999, 0xFF999999};
Bitmap bm = Bitmap.createBitmap(pixels, 8, 1, Bitmap.Config.ARGB_8888);
Shader shader = new BitmapShader(bm,
    Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
bg.getPaint().setShader(shader);
view.setBackgroundDrawable(bg);

Есть ли способ сделать это строго как XML-элементы, без использования растровых ресурсов?

1 Ответ

7 голосов
/ 18 февраля 2011

К сожалению, но я почти уверен, что ответ - нет.

Из трех необходимых задач только две могут быть выполнены без какого-либо кода.Вы можете создать основу шаблона полос в виде <layer-list> из двух или более <shape> элементов.Вы также можете создать повторяющийся узор мозаики, используя <bitmap> XML Drawable.Трюк - это обязательный средний шаг: <bitmap> не примет другое рисование в качестве исходного значения (только изображение), поэтому невозможно связать их без вмешательства небольшого кода для создания растрового изображения (например, того, что у вас есть).написано).

Мне бы очень хотелось, чтобы режимы плиток применялись и к большему количеству рисованных объектов, и +1 за предоставленный мне пример создания шаблона полностью в коде:)

...