WedX - журнал о программировании и компьютерных науках

Как выделить определенные прямоугольники на холсте

Основываясь на коде, который я использовал для рисования на холсте, и на снимке экрана, я пытаюсь заполнить определенный красный прямоугольник, но он не работает. Что можно сделать, чтобы ТОЛЬКО прямоугольник в верхнем ряду, 2-й слева, был заполнен?

введите здесь описание изображения

public class Car extends View {
    public Car(Context context) {
        super(context);
        init();
    }

    public Car(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public Car(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    Paint paint;

    private void init() {
        paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStrokeWidth(4);
//        paint.setStyle(Paint.Style.STROKE); // delete line for filled rect
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int w = canvas.getWidth();
        int h = canvas.getHeight();

        int rectWidth = w / 5;
        int space = w / 15;
        int topRectHeight = getPaddingTop();
        int bottomRectHeight = getPaddingBottom();

        for (int i = 0; i < 4; i++) {
            int left = i * (rectWidth + space);
            int right = left + rectWidth;

            if (i == 2){
                paint.setStyle(Paint.Style.STROKE); // delete line for filled rect
            }

            Rect rect = new Rect(left, 0, right, topRectHeight);
            canvas.drawRect(rect, paint);

            Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
            canvas.drawRect(rect2, paint);
        }
    }
}

Ответы:


1

Таким образом, будет заполнен только указанный прямоугольник (только верхний 2-й).

 paint.setStyle(Paint.Style.STROKE); //add this     
      for (int i = 0; i < 4; i++) {
                    int left = i * (rectWidth + space);
                    int right = left + rectWidth;

                    if (i == 1){
                        paint.setStyle(Paint.Style.FILL); // change to this
                    }

                    Rect rect = new Rect(left, 0, right, topRectHeight);
                    canvas.drawRect(rect, paint);
                    paint.setStyle(Paint.Style.STROKE);//add this
                    Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
                    canvas.drawRect(rect2, paint);
                }

Если вы хотите, чтобы было заполнено только 2-е дно:

 paint.setStyle(Paint.Style.STROKE); //you can remove this now    
      for (int i = 0; i < 4; i++) {
                    paint.setStyle(Paint.Style.STROKE);//add this
                    int left = i * (rectWidth + space);
                    int right = left + rectWidth;           
                    Rect rect = new Rect(left, 0, right, topRectHeight);
                    canvas.drawRect(rect, paint);

                    if (i == 1){
                        paint.setStyle(Paint.Style.FILL); // change to this
                    }
                    Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
                    canvas.drawRect(rect2, paint);
                }

И если вы хотите, чтобы 2-й верхний и нижний заполнены:

paint.setStyle(Paint.Style.STROKE); //you can remove this now    
      for (int i = 0; i < 4; i++) {
                    paint.setStyle(Paint.Style.STROKE);//add this
                    int left = i * (rectWidth + space);
                    int right = left + rectWidth;          
                    if (i == 1){
                        paint.setStyle(Paint.Style.FILL); // change to this
                    }

                    Rect rect = new Rect(left, 0, right, topRectHeight);
                    canvas.drawRect(rect, paint);
                    Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
                    canvas.drawRect(rect2, paint);
                }
16.08.2015
  • Только что заполнять? Или вместе с верхней? 16.08.2015
  • Можете ли вы также указать, что нужно сделать, чтобы заполнить как 2-й верхний, так и 2-й нижний, пожалуйста? 16.08.2015
  • Готово. Я надеюсь, что это поможет вам понять, как он рисуется. 16.08.2015
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]