Программное создание прямоугольной фигуры с прямоугольным вырезом для кнопки - PullRequest
0 голосов
/ 09 октября 2018

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

Вот что у меня есть (но все, что можно увидеть, это верхняя полоса прямоугольника, которая, как ни странно, черная, несмотря на то, что это цвет выреза):

    PorterDuffColorFilter pd = new PorterDuffColorFilter(Color.BLACK, PorterDuff.Mode.SRC_OUT);
    ShapeDrawable cutout = new ShapeDrawable();
    cutout.setBounds(top.x, top.y, top.x+cellLength*matCols, top.y+cellLength*matRows);
    cutout.setColorFilter(pd);
    ShapeDrawable border = new ShapeDrawable();
    border.setBounds(Math.round(top.x-thick*cellLength), Math.round(top.y-thick*cellLength), Math.round(top.x+cellLength*(matCols+thick)), Math.round(top.y+cellLength*(matRows+thick)));
    LayerDrawable ogre = new LayerDrawable(new Drawable[]{cutout, border});
    Button test = new Button(this.getContext());
    test.setLayoutParams(new LayoutParams((int)Math.round(cellLength*(matCols + 2*thick)), (int)Math.round(cellLength*thick)));
    test.setBackground(ogre);

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вы можете использовать PathShape вместо прямоугольника по умолчанию в нашем рисовании.Добавьте два прямоугольника к пути с противоположными направлениями пути, так что один будет вырезан из другого.

Или вы можете разделить вашу границу на верхний, нижний, левый и правый прямоугольники, которые не перекрываютрегион выреза.

0 голосов
/ 10 октября 2018

Почему бы не создать нарисованный XML:

rect.xml

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="4dp" android:color="#000000"></stroke>
</shape>

и использовать его следующим образом:

test.setBackgroundResource(R.drawable.rect);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...