Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 297

Почему не работает canvas.drawRect в onDraw?

19.10.2018, 17:13. Показов 980. Ответов 1

Студворк — интернет-сервис помощи студентам
Хочу написать свой компонент, который бы показывал соотношение правильных и неправильных ответов: правильный - слева добавляется зелёная черта, неправильный - справа красная. Вот код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package com.abejon.adev.answers.CustomVidgets;
 
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
 
import com.abejon.adev.answers.R;
 
public final class ProgressBar extends View {
 
    int correctAnswerCount = 0;
    int incorrectAnswerCount = 0;
    int tickMarksNumber = 10;
    int backgroundColor = Color.LTGRAY;
 
    Paint backgroundPaint;
    Paint correctTickMarkPaint;
    Paint incorrectTickMarkPaint;
    Paint emptyTickMarkPaint;
 
    public void resetCounters() {
        correctAnswerCount = 0;
        incorrectAnswerCount = 0;
        invalidate();
    }
 
    public void incrementCorrectAnswerCount() {
        correctAnswerCount++;
        invalidate();
    }
 
    public int getCorrectAnswerCount() {
        return correctAnswerCount;
    }
 
    public void incrementIncorrectAnswerCount() {
        incorrectAnswerCount++;
        invalidate();
    }
 
    public int getIncorrectAnswerCount() {
        return incorrectAnswerCount;
    }
 
    public void setTickMarksNumber(int tickMarksNumber) {
        this.tickMarksNumber = tickMarksNumber;
        invalidate();
    }
 
 
    public int getTickMarksNumber() {
        return tickMarksNumber;
    }
    public ProgressBar(Context context, AttributeSet attributes) {
        super(context, attributes);
 
        TypedArray typedArray = getContext().obtainStyledAttributes(attributes, R.styleable.ProgressBar);
        tickMarksNumber = typedArray.getInt(R.styleable.ProgressBar_pb_tick_marks_number, 50);
        backgroundColor = typedArray.getColor(R.styleable.ProgressBar_pb_background_color, Color.LTGRAY);
        typedArray.recycle();
        initPaints();
    }
 
    private void initPaints() {
        emptyTickMarkPaint = new Paint();
        emptyTickMarkPaint.setColor(0xFF000000);
        emptyTickMarkPaint.setStrokeWidth(5);
 
        backgroundPaint = new Paint();
        backgroundPaint.setColor(backgroundColor);
        backgroundPaint.setStrokeWidth(3);
    }
 
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int markHeight = getHeight();
        int markWidth = getWidth() / tickMarksNumber;
        canvas.drawColor(backgroundColor);//drawARGB(0xFF, 0xDD, 0xDD, 0xDD);
        canvas.drawPoint(10, 10, emptyTickMarkPaint);
        for(int i = 0; i < tickMarksNumber; i++) {
            canvas.drawRect(markWidth * i, markHeight - 1, markWidth * (i + 1), 0, emptyTickMarkPaint);
        }
    }
}
Прямоугольная заливка методом canvas.drawColor(backgroundColor); в 83-й строке срабатывает, а вот рисование при помощи Paint - нет.
В чём может быть дело?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2018, 17:13
Ответы с готовыми решениями:

Почему в Canvas элементы неподвижны
Две кнопки расположены в Grid, все работает четко. Но как только я создал Canvas , заменил &quot;Grid&quot; на &quot;lol&quot; при вызове...

Почему Canvas не выводит текст?
В коде, приведённом ниже вроде всё правильно, но не пойму, почему не выводится текст! MainActivity.java public class MainActivity...

Почему canvas остался белым?
&lt;html&gt; &lt;title&gt;Test&lt;/title&gt; &lt;body&gt; &lt;iframe src=&quot;page.php&quot; width=100% height=90%&gt; &lt;/iframe&gt; &lt;/body&gt; &lt;script...

1
3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 297
21.10.2018, 17:44  [ТС]
Ошибка была в неправильном указании координат рисуемых прямоугольников.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2018, 17:44
Помогаю со студенческими работами здесь

Почему не отображается картинка на canvas?
Извините, я пока чайник, не знал, куда написать, написал сюда. Помогите, почему не отображается картинка? &lt;HTML&gt; ...

Почему не обнавляются preferences без перезапуска Activity (Canvas)
Подскажите где я что пропустила? Вот мой canvas. В самом низу переменная &quot;Значение списка - &quot; + prefs не хочет обнавляться сразу...

Почему не добавляется UserControl в Canvas в обработчике клика по кнопке
Взял я тут игру одну допилить ради собственного интереса, так как особо раньше не вникал в анимации, и игры на Silverlight не делал, даже...

ListView OnDraw + OnPaint
Как сделать что б работали оба переопредиления? protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e); ...

Не получается вызвать метод onDraw();
Здравствуйте! Я новичок в разработке приложений под android и сегодня безрезультатно провел день, т.к. не знаю решения моей проблемы....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK сделайте это, JDK, то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера . . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru