Нужно ли мне перезвонить super.onDraw() в пользовательском представлении?
Я не слишком понимаю об этом, и ни документы, ни документы.
Когда я создаю пользовательский вид, я переопределяю так:
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
//more code here...
}
Мой вопрос заключается в необходимости вызова super.onDraw(canvas);
. Код, похоже, работает нормально без него, но я хочу быть уверенным, что все в порядке, чтобы его оставить.
Нужно ли это?
Ответы
Ответ 1
Если вы хотите, чтобы он вызывал метод onDraw суперкласса (подумайте TextView или KeyboardView, а не общий вид), вызовите super.onDraw. Если вы этого не хотите, т.е. Вы планируете рисовать весь просмотр самостоятельно (как вам кажется), нет причин для его вызова.
Кроме того, если вы расширяете представление (а не какой-то класс, расширяющий представление), super.onDraw ничего не делает.
Для меня я вызываю super.onDraw, когда хочу рисовать линии над KeyboardView. Итак, super.onDraw рисует клавиатуру, и мой пользовательский LatinKeyboardView (который расширяет KeyboardView) рисует путь прокрутки поверх клавиатуры.
Ответ 2
Заглядывание в исходный код показывает, что View.onDraw()
- пустой метод. Итак, вызывая super.onDraw()
, если родительский класс сам View
, ничего не делает. Это лишний, но безвредный.
Следует ли вам идти дальше и делать это в любом случае, это отдельный вопрос об эффективности, безопасности и стиле.
Ответ 3
Да, это так. Если вы настраиваете TextView, super.onDraw будет обеспечивать, чтобы все, что принадлежит атрибутам TextView (например, текст, цвет текста, тень текста и т.д.), То же самое, что и другие представления, такие как Button, CheckBox...
В случае, если ваш пользовательский View extend View (не определенный подкласс View, просто View), все же лучше оставить super.onDraw(canvas) там для некоторых методов View draw (например, setBackgroundDrawable и т.д.)
Ответ 4
Это не требуется, если вы фактически не переопределяете метод onDraw()
. Если новый класс не переопределяет его, супер метод будет вызываться автоматически.