Пытаюсь понять иерархию представлений

Я пишу приложение с единственной целью - попытаться понять, как работает иерархия представлений в Android. У меня сейчас очень серьезные проблемы. Я постараюсь быть кратким в своем объяснении.

Setup:

В настоящее время у меня три представления. 2 являются ViewGroups , а 1 является только ракурсом . Допустим, они в таком порядке:

    TestA extends ViewGroup
    TestB extends ViewGroup
    TestC extends View
    TestA->TestB->TestC
    Where TestC is in TestB and TestB is in TestA.

В моем действии я просто отображаю виды так:

TestA myView = new TestA(context);
myView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
setContentView(myView);

Проблемы:

  1. Метод onDraw (Canvas canvas) , никогда не вызывается. Я видел пару решений этого утверждения, что мой вид не имеет никаких размеров (высота/ширина = 0), однако, это не так. Когда я переопределяю onLayout () , я получаю размеры моего макета и они верны. Кроме того, getHeight ()/ширина () точно такие, какими они должны быть. Я также могу переопределить dispatchDraw () и получить базовые виды, чтобы нарисовать себя.

  2. Я хочу анимировать объект в TestB . Традиционно я бы переопределял метод onDraw () при вызове invalidate () , пока объект не закончит анимацию, которую он должен был сделать. Однако при вызове invalidate () в , в , представление никогда не перерисовывается. У меня сложилось впечатление, что задача родительского представления состоит в повторном вызове метода onDraw () , но родительское представление не вызывает метод dispatchDraw () .

Я думаю, мои вопросы, почему мой метод onDraw () моего родительского представления никогда не будет вызван для начала? Какие методы в моем родительском представлении предполагается вызывать, когда один из его детей признает себя недействительным? Является ли родитель ответственным за то, чтобы его дети были нарисованы или Android заботится об этом? Если Android отвечает , лишают законной силы () , почему мой TestB никогда не становится оттянутым снова?

6
задан DeeV 15 September 2011 в 18:04
поделиться